我该如何将宏传递给预处理器?例如,如果我想编译代码的某个部分,因为用户想要编译单元测试,我应该这样做:
#ifdef _COMPILE_UNIT_TESTS_
BLA BLA
#endif //_COMPILE_UNIT_TESTS_
现在我需要将这个值从CMake传递到预处理器。设置一个变量行不通,那么我该怎么做呢?
add_definitions(-DCOMPILE_UNIT_TESTS)
(详见CMake文档) 或修改标志变量之一(CMAKE_CXX_FLAGS
或CMAKE_CXX_FLAGS_<configuration>
)或在目标上设置COMPILE_FLAGS
变量。
此外,以下划线后跟大写字母开头的标识符保留供实现使用。包含双下划线的标识符也是如此。因此,请勿使用它们。
cmake .. -DCOMPILE_UNIT_TESTS
。 - dantswainset_target_properties(target1 target2 PROPERTIES COMPILE_DEFINITIONS "COMPILE_UNIT_TESTS")
。 - Lesqueconfig.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 */
#include "config.h"
添加类似于include_directories(${CMAKE_CURRENT_BINARY_DIR})
的内容到您的CMakeLists.txt
中,以使其起作用。include_directories(${PROJECT_BINARY_DIR})
,否则CMake将无法找到生成的config.h
。 - drs