有没有一种很好的跨平台方法可以使用CMake包含外部C++库
Is there a good cross-platform way to include external C++ libraries using CMake?
我对cmake还很陌生,但到目前为止,我很喜欢我的测试项目,迫不及待地想在下一个真正的项目中使用它。
我想开始将cmake与外部库(接口、pdf、json库等)一起使用,但我有点困惑于这样做的最佳方式,即仍然允许项目跨平台。
例如,让我们使用像wxWidgets这样的库,它需要在每个系统的基础上进行编译(我知道wxWidget有一个cmake命令,但我只是将其用作示例)。
最好要求用户将编译后的wxWidgets文件包括在源目录中,然后指向CMakeLists.txt文件中的文件,还是最好要求用户设置一个指向wxWidget安装目录的系统变量,然后指向CMakeLists.txt文件中的?有没有一种方法可以包括一个自动化的库构建命令,我可以只包括大量的wxWidgets源代码?还是还有另一个我完全忽略的解决方案?
以上所有内容都可能以某种形式发挥作用,但随着CMake的广泛使用,我很好奇大多数人会如何处理这一问题。
这是一个很难在谷歌搜索中表达的问题,如果已经有人问过了,很抱歉。
正如您所说,许多库在CMake中已经有了一个模块,允许CMake定位它们的文件。如果是这种情况,他们通常只需要找到包含外部库的"根"目录。这就是CMAKE_PREFIX_PATH变量的原因,该变量经常在命令行中指定。例如:
cmake . -DCMAKE_PREFIX_PATH="<WxWidgetsRoot>"
在许多系统(*nix和OSX)上,库和头文件都安装在系统路径中,CMake会自动定位这些文件,因为默认情况下会搜索这些路径。在Windows系统上,通常使用CMAKE_PREFIX_PATH
。
如果您的外部项目没有一个CMake脚本来定位其头/库,那么您可以通过创建一个Find<package>.cmake
文件并将其放入CMAKE_MODULE_PATH
中来自己编写它。有关详细说明,请参阅此处。
至于项目依赖关系的分布,这完全取决于您。a)要求用户手动获取它们,b)通过脚本下载它们,c)从您自己的源代码管理(例如git子模块)获取它们中的任何一种都是可能的选择,而且可能还有更多。
- cmake 可以包含具有头文件和库文件但没有 .cmake 文件的库吗?
- 是否可以使C++类成为Objc类的委托
- 是否可以使一个类成为两个不同层次结构的子类?
- 将外部C++库与 CMake 一起使用时出错
- 如何将 Pybind11 与 CMAKE 一起使用以链接 2 个模块
- Cmake可以要求静态库(例如Zlib)
- 当它们不与GCC和CMAKE一起使用时,如何解析未定义的引用
- 是否有编译器标志可以使较新的 gcc 版本像旧版本一样构建
- 当将QT创建者与CMAKE一起使用时,为什么我不必手动链接MSVC库
- 在将QT与Cmake一起使用时解决链接错误
- C 可以使destuructor不称为班级成员和基类攻击方的灾难
- 可以使未命名的结构静态
- 是否可以使整数仅收到一个单个数字而不是两个接收输入
- C++:有哪些常规方法可以使代码更有效地用于大数字
- 是否可以使 std 容器使用默认运算符为新?
- LD_BIND_NOW可以使可执行文件运行得更慢?
- 是否可以使头文件使文本居中?- 在控制台中
- 有什么方法可以使核心忙碌等待
- CMake:使静态库有效,但动态库不起作用
- 有没有一种技术可以使虚函数在所有派生类中强制重写?