cmake

子目录代码中如何关联 cmake 宏定义

CMakeLists.txt 增加如下内容:

OPTION(MOCK_DATA "Hello World" OFF)
if (MOCK_DATA)
    add_definitions(-DMOCK_DATA_MICRO)
endif()

同理子目录道理一样,通过判断 cmake 变量,来决定是否定义源码中的宏定义。

此时在 cpp 源代码中可以通过如下形式使用宏定义:MOCK_DATA_MICRO

#ifdef MOCK_DATA_MICRO
	hello_world();
#endif

如果想使能 MOCK_DATA_MICRO 宏定义则需要在 cmake 编译是指定参数:

cmake -DMOCK_DATA=ON ../; make -j8

cmake 中 if(NOT XXX) 和 if(NOT DEFINED XXX) 的区别

OPTION(MOCK_DATA "Hello World" OFF)
if (MOCK_DATA)
    add_definitions(-DMOCK_DATA_MICRO)
endif()

if(NOT DEFINED MOCK_DATA)
	message(STATUS "MOCK_DATA ---")
else
	message(STATUS "MOCK_DATA +++")
endif

尽管我编译时 cmake 命令行没有指定 -DMOCK_DATA=ON 选项,仍然打印的是 MOCK_DATA +++

总结:虽然命令行没有指定对应选项,但是 CMakeLists.txt 文件中声明了 OPTION(MOCK_DATA "Hello World" OFF) 则 MOCK_DATA 就是 DEFINED 只不过值为 OFF。

因此需要修改代码为:

OPTION(MOCK_DATA "Hello World" OFF)
if (MOCK_DATA)
    add_definitions(-DMOCK_DATA_MICRO)
endif()

if(NOT MOCK_DATA)
	message(STATUS "MOCK_DATA ---")
else
	message(STATUS "MOCK_DATA +++")
endif

请我喝杯咖啡吧 ヾ(^▽^*)))
Luyang - 支付宝 支付宝
Luyang - 微信 微信
  • 文章标题: cmake
  • 本文作者: Luyang
  • 本文链接: /post/cmake/
  • 版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
欢迎关注我的其它发布渠道