实际上,我的项目有这个文件:
/ 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/