如何将宏传递给预处理器?例如,如果我想是因为用户想要编写单元测试编译我的代码一些部分,我这样做:
#ifdef _COMPILE_UNIT_TESTS_
BLA BLA
#endif //_COMPILE_UNIT_TESTS_
Run Code Online (Sandbox Code Playgroud)
现在我需要将此值从CMake传递给预处理器.设置变量不起作用,那么我该如何实现呢?
Cat*_*lus 55
add_definitions(-DCOMPILE_UNIT_TESTS)(参见CMake的doc)或修改其中一个标志变量(CMAKE_CXX_FLAGS,或CMAKE_CXX_FLAGS_<configuration>)或COMPILE_FLAGS在目标上设置变量.
此外,以下划线后跟大写字母开头的标识符将保留给实现.标识符也包含双下划线.所以不要使用它们.
Les*_*que 16
如果要配置许多预处理器变量,可以使用configure_file:
创建配置文件,例如.config.h.in同
#cmakedefine _COMPILE_UNIT_TESTS_
#cmakedefine OTHER_CONSTANT
...
Run Code Online (Sandbox Code Playgroud)
然后在你的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)
Run Code Online (Sandbox Code Playgroud)
在config.h生成目录中,生成:
#define _COMPILE_UNIT_TESTS_
/* #undef OTHER_CONSTANT */
Run Code Online (Sandbox Code Playgroud)
正如robotik所建议的那样,你应该添加类似于include_directories(${CMAKE_CURRENT_BINARY_DIR})你的东西CMakeLists.txt,#include "config.h"以便在C++中工作.
| 归档时间: |
|
| 查看次数: |
50821 次 |
| 最近记录: |