CMake如何传递预处理器宏

如何将宏传递给预处理器?例如,如果我想是因为用户想要编写单元测试编译我的代码一些部分,我这样做:

#ifdef _COMPILE_UNIT_TESTS_
    BLA BLA
#endif //_COMPILE_UNIT_TESTS_

现在我需要将此值从CMake传递给预处理器.设置变量不起作用,那么我该如何实现呢?

  1. add_definitions(-DCOMPILE_UNIT_TESTS)(参见CMake的doc)修改其中一个标志变量(CMAKE_CXX_FLAGS,或CMAKE_CXX_FLAGS_<configuration>)COMPILE_FLAGS在目标上设置变量.此外,以下划线后跟大写字母开头的标识符将保留给实现.标识符也包含双下划线.所以不要使用它们.
  2. 也可以从命令行中完成一个``cmake .. -DCOMPILE_UNIT_TESTS`
  3. 设置CMake缓存变量
  4. 或者CMake 3.0中的[target_compile_definitions](http://www.cmake.org/cmake/help/v3.0/command/target_compile_definitions.html)
  5. 要仅为特定目标添加定义,请使用[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++中工作.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

龙行天下01

你的鼓励将是我的最大写作动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值