CMake:如何通过预处理macros

我如何将macros传递给预处理器? 例如,如果我想编译我的代码的一部分,因为用户想编译unit testing,我会这样做:

#ifdef _COMPILE_UNIT_TESTS_ BLA BLA #endif //_COMPILE_UNIT_TESTS_ 

现在我需要将这个值从CMake传递给预处理器。 设置一个variables不起作用,那么我该如何做到这一点?

add_definitions(-DCOMPILE_UNIT_TESTS) (参考CMake的文档 ) 修改其中一个标志variables( CMAKE_CXX_FLAGSCMAKE_CXX_FLAGS_<configuration>在目标上设置COMPILE_FLAGSvariables。

此外,以下划线开头的标识符以及大写字母将被保留用于实现。 包含双下划线的标识符也是如此。 所以不要使用它们。

如果你有很多预处理器variables需要configuration,你可以使用configure_file :

创build一个configuration文件,例如。 config.h.in

 #cmakedefine _COMPILE_UNIT_TESTS_ #cmakedefine OTHER_CONSTANT ... 

然后在你的CMakeLists.txt中:

 set(_COMPILE_UNIT_TESTS_ ON CACHE BOOL "Compile unit tests") # Configurable by user set(OTHER_CONSTANT OFF) # Not configurable by user configure_file(config.h.in config.h) 

在build目录下,生成config.h

 #define _COMPILE_UNIT_TESTS_ /* #undef OTHER_CONSTANT */ 

正如robotik所build议的那样 ,你应该在你的CMakeLists.txtjoininclude_directories(${CMAKE_CURRENT_BINARY_DIR})来使用#include "config.h"来使用C ++。