我对cmake很陌生,但到目前为止我对我的测试项目非常喜欢,并且迫不及待地将它用于我的下一个真实项目。
我想开始将cmake与外部库(接口,pdf,json库等)一起使用,但我对这样做的最佳方法感到困惑,这仍然允许项目跨平台。
例如,让我们使用像wxWidgets这样的库,需要在每个系统的基础上进行编译(我知道有一个用于wxWidgets的cmake命令,但我只是以它为例)。
要求用户在源目录中包含已编译的wxWidgets文件然后指向CMakeLists.txt文件中的文件会更好吗,还是要求他们设置指向wxWidgets的系统变量会更好?安装目录,然后指向CMakeLists.txt文件中的那个?有没有办法包含自动库构建命令,我可以只包括大量的wxWidgets源?或者是否有另一种我完全忽视的解决方案?
上述所有内容都可能以某种形式发挥作用,但随着CMake的广泛使用,我很好奇大多数人会如何处理这个问题。
这是一个在谷歌搜索中难以表达的问题,很抱歉,如果它已被问到。
答案 0 :(得分:2)
正如你所说,许多图书馆已经在CMake中拥有一个模块,允许他们的文件由CMake定位。如果是这种情况,通常他们所需要的只是找到包含外部库的“根”目录。这就是CMAKE_PREFIX_PATH变量的原因,该变量经常在命令行中指定。例如:
cmake . -DCMAKE_PREFIX_PATH="<WxWidgetsRoot>"
在许多系统(* nix和OSX)上,库和标头安装在系统路径中,CMake会自动定位它们,因为默认情况下会搜索这些路径。在Windows系统上,通常使用CMAKE_PREFIX_PATH
。
如果您的外部项目没有找到其标题/库的CMake脚本,您可以通过创建Find<package>.cmake
文件并将其放入CMAKE_MODULE_PATH
来自行编写。有关详细说明,请参阅here。
至于您的项目依赖关系的分布,这完全取决于您。 a)要求您的用户手动获取它们,b)通过脚本下载它们,c)从您自己的源代码控制(例如git子模块)获取它们是可能的选择,并且可能有更多。