c++ - 有没有一种好的跨平台方法来使用 CMake 包含外部 C++ 库?

标签 c++ cmake cross-platform static-libraries

我对 cmake 还很陌生,但到目前为止我很喜欢它在我的测试项目中的表现,并且迫不及待地想在我的下一个实际项目中使用它。

我想开始将 cmake 与外部库(接口(interface)、pdf、json 库等)一起使用,但我对执行此操作仍允许项目跨平台的最佳方法有点困惑。

例如,让我们使用像 wxWidgets 这样的库,它需要在每个系统的基础上进行编译(我知道 wxWidgets 有一个 cmake 命令,但我只是用它作为示例)。

要求用户将编译后的 wxWidgets 文件包含在源目录中,然后在 CMakeLists.txt 文件中指向该文件会更好,还是要求他们设置一个指向 wxWidgets 的系统变量会更好安装目录,然后指向 CMakeLists.txt 文件中的那个?有没有办法包含自动库构建命令,并且我可以只包含大量的 wxWidgets 源?或者还有另一个我完全忽略的解决方案?

以上所有内容可能会以某种形式起作用,但随着 CMake 的广泛使用,我很好奇大多数人会如何处理这个问题。

这是一个很难在谷歌搜索中表达的问题,如果已经有人问过,我们深表歉意。

最佳答案

正如您所说,许多库在 CMake 中已经有一个模块,允许 CMake 定位它们的文件。如果是这种情况,通常他们需要的只是找到包含外部库的“根”目录。这就是 CMAKE_PREFIX_PATH 的原因变量,经常在命令行中指定。例如:

 cmake . -DCMAKE_PREFIX_PATH="<WxWidgetsRoot>"

在许多系统(*nix 和 OSX)上,库和头文件安装到系统路径中,CMake 将自动找到它们,因为默认情况下会搜索这些路径。在 Windows 系统上,通常 CMAKE_PREFIX_PATH用来。

如果您的外部项目没有定位其 header /库的 CMake 脚本,您可以通过创建 Find<package>.cmake 自行编写。文件并将其放入您的 CMAKE_MODULE_PATH 。请参阅here获取更详细的说明。

至于项目依赖项的分配,这完全取决于您。 a) 要求您的用户手动获取它们,b) 通过脚本下载它们,c) 从您自己的源代码管理(例如 git 子模块)获取它们都是可能的选择,而且可能还有更多。

关于c++ - 有没有一种好的跨平台方法来使用 CMake 包含外部 C++ 库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46733147/

相关文章:

c++ - 如何在Windows下使用cmake在qt GUI应用程序中显示控制台

c++ - 运行我的程序时 Directx 11 蓝屏死机

c++ - 如何将 QKeyEvent::nativeModifiers() 转换为 UINT fsModifiers(用于 winapi RegisterHotKey)

C++11 - enable_if - 类定义之外的函数实现

c++ - 交叉编译中的 CMake CMAKE_AUTOMOC

Android和IOS游戏引擎

C++:是否有一种简单的方法将 'mapping' 的十六进制颜色 `0xff2a2620` 转换为更具可读性的字符串 'lovelyBrown'?

c++ - "No rule to make target"cmake 使用 make -j 时出错

cross-platform - 编写一次随处运行浏览器插件工具/框架/语言?

c - 长对齐问题(MSVC vs. GCC)