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_FLAGS
或CMAKE_CXX_FLAGS_<configuration>
) 或在目标上设置COMPILE_FLAGS
variables。
此外,以下划线开头的标识符以及大写字母将被保留用于实现。 包含双下划线的标识符也是如此。 所以不要使用它们。
如果你有很多预处理器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.txt
joininclude_directories(${CMAKE_CURRENT_BINARY_DIR})
来使用#include "config.h"
来使用C ++。