如何将宏传递给预处理器?例如,如果我想是因为用户想要编写单元测试编译我的代码一些部分,我这样做:
#ifdef _COMPILE_UNIT_TESTS_
BLA BLA
#endif //_COMPILE_UNIT_TESTS_
现在我需要将此值从CMake传递给预处理器.设置变量不起作用,那么我该如何实现呢?
add_definitions(-DCOMPILE_UNIT_TESTS)
(参见CMake的doc)或修改其中一个标志变量(CMAKE_CXX_FLAGS
,或CMAKE_CXX_FLAGS_<configuration>
)或COMPILE_FLAGS
在目标上设置变量.此外,以下划线后跟大写字母开头的标识符将保留给实现.标识符也包含双下划线.所以不要使用它们.- 也可以从命令行中完成一个``cmake .. -DCOMPILE_UNIT_TESTS`
- 设置CMake缓存变量
- 或者CMake 3.0中的[target_compile_definitions](http://www.cmake.org/cmake/help/v3.0/command/target_compile_definitions.html)
- 要仅为特定目标添加定义,请使用[COMPILE_DEFINITIONS](http://www.cmake.org/cmake/help/cmake-2-8-docs.html#prop_dir:COMPILE_DEFINITIONS).例如:`set_target_properties(target1 target2 PROPERTIES COMPILE_DEFINITIONS"COMPILE_UNIT_TESTS")`
如果要配置许多预处理器变量,可以使用configure_file:
创建配置文件,例如.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)
在config.h
生成目录中,生成:
#define _COMPILE_UNIT_TESTS_
/* #undef OTHER_CONSTANT */
正如robotik所建议的那样,你应该添加类似于include_directories(${CMAKE_CURRENT_BINARY_DIR})
你的东西CMakeLists.txt
,#include "config.h"
以便在C++中工作.