我需要通过添加编译器开关来编译某个项目的不同版本。通常我会通过使用 add_definitions 或类似的东西来做到这一点
set_property( TARGET mylib PROPERTY COMPILE_DEFINITIONS _MYDEFINE=1 )
在 CMakeLists.txt 文件中。
然而,在这个特定的项目中,我不能修改任何来源,包括 CMakeLists.txt 文件。
我希望像这样的东西
cmake -D_MYDEFINE=1 <path to sources>
会生成一个项目文件(在我的例子中是 Visual Studio 2008,但不重要),它在其预处理器定义中包含 _MYDEFINE=1,但实际上它不会。
我在这里有什么选择?是否有不同的 cmake 命令行选项来实现这一点?随意建议不包括命令行的解决方案,只要不需要更改项目的 CMakeLists.txt。
最佳答案
我现在设法做到了:
我能够说服所有人将以下几行添加到常见的 CMakeLists.txt 中:
IF (NOT DEFINED _MYDEFINE)
SET(_MYDEFINE <default value>)
ENDIF()
ADD_DEFINITIONS(-D_MYDEFINE=${_MYDEFINE})
(不,它并不是真正的“MYDEFINE”,
这不会改变当前没有额外编译器标志的编译行为,因此是有效的改变。
它允许你做
cmake -D_MYDEFINE=<my value> <path to sources>
当 cmake 创建项目文件时,此 cmake 定义将映射到 C++ 预编译器定义。
关于c++ - C++ #define 的 CMake 命令行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9531637/