c++ - 如何将 CMake 文件构造为通用但又特定于操作系统?

标签 c++ cmake multiplatform

实际上,我的项目有这个文件:

/ cmake / CMakeLists.txt
/ sources / {my cpp headers ...}

然后我在每个操作系统下以相同的方式构建“项目”(makefile 或 .sln...),在此存储库的根目录下使用以下命令:

cmake ./cmake/

但是它需要一些可选的设置,例如在每个操作系统上都不同的 CMAKE_CXX_FLAGS

我选择将这个变量放在 /cmake/CMakeCache.txt 中,但不提交这个文件(因为它在操作系统之间是不同的)。开发人员必须在每台机器上生成(编辑)这个文件。关于这个 CMakeCache 文件,我只在自述文件中给出了一些说明。

我怎样才能使 cmake 文件再次通用,但在提交的内容中也有这种差异?

最佳答案

在您的 CMakeLists.txt 中使用这样的代码:

if(UNIX AND NOT APPLE)
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pthread")
    set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -pthread")
elseif(WIN32)
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DWIN32_LEAN_AND_MEAN")
endif()

注意事项:

  • 将您的选项附加到 ${CMAKE_CXX_FLAGS},以便用户指定的设置也包含在内。
  • 您不能将 list(APPEND ...) 与编译器标志一起使用,因为它使用分号来分隔参数(这就是为什么上面的代码使用带引号的 set(...) 的原因)
  • APPLE 也是 UNIX,所以当我们真正指的是 Linux 时,我们不需要 APPLE

关于c++ - 如何将 CMake 文件构造为通用但又特定于操作系统?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49530179/

相关文章:

c++ - 将四个字符的字符串转换为长字符串

c++ - 区分n张图片的算法

c++ - 将 char num[50] 复制到 std::string

gcc - 如何在编译期间强制 cmake 包含 "-pthread"选项?

c# - 创建具有 native 依赖项的 NetCore NuGet 包

c++ - 如何解析文件路径

cmake - 如何为子目录指定CMake Preset?

c++ - CMake AUTOMOC 文件位于不同的文件夹中

iphone - 用于多跨平台使用的音频库 C++(iphone、android...)

c# - 在 Visual Studio 2010 中针对不同的构建平台使用不同的引用?