[cmake]cmake编译命令add_compile_definitions简介

add_compile_definitions

命令格式:add_compile_definitions(<definition> ...)

该命令用于编译源文件时添加预处理定义,最终会添加到COMPILE_DEFINITIONS属性(当前CMakeLists文件所在的目录和包含的构建目标都会添加)中。预处理定义的格式为VAR或VAR=value,CMake负责将指定的定义转换成本地构建系统可识别的值。对于C/C++编译器来说,就是会将此函数添加的预定义命令最终编译的时候使用-D参数添加到编译命令行中。

注意:CMake 3.26版本之后,变量中的前导-D会被移除。

下面来简单的测试一下,新建两个文件,CMakeLists.txt和main.cpp。

main.cpp文件内容:如果定义了DEBUG_MODE,则会打印"In debug mode..."这一行

#include <iostream>
int main(int argc, char** argv)
{
#ifdef DEBUG_MODE
    std::cout << "In debug mode..." << std::endl;
#endif
    std::cout << "Hello world!" << std::endl;
    return 0;
}

CMakeLists.txt文件内容:添加了预处理标志DEBUG_MODE,并将COMPILE_DEFINITIONS属性也打印出来

CMAKE_MINIMUM_REQUIRED(VERSION 3.22)
PROJECT(compiler_options)

ADD_COMPILE_DEFINITIONS(DEBUG_MODE)

GET_PROPERTY(defs DIRECTORY PROPERTY COMPILE_DEFINITIONS)
MESSAGE("Compile definitions: ${defs}")

ADD_EXECUTABLE(main main.cpp)

运行cmake .命令,得到的输出如下:

$ cmake .
-- The C compiler identification is GNU 11.4.0
-- The CXX compiler identification is GNU 11.4.0
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /usr/bin/cc - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
Compile definitions: DEBUG_MODE
-- Configuring done
-- Generating done

运行make VERBOSE=1查看完成的编译过程,关键信息如下,可以看到预定义选项已经通过-DDEBUG_MODE传入给编译器:

$ make VERBOSE=1
……
[ 50%] Building CXX object CMakeFiles/main.dir/main.cpp.o
/usr/bin/c++ -DDEBUG_MODE   -MD -MT CMakeFiles/main.dir/main.cpp.o -MF CMakeFiles/main.dir/main.cpp.o.d -o CMakeFiles/main.dir/main.cpp.o -c /XXX/main.cpp
[100%] Linking CXX executable main

运行./main结果如下:

$ ./main 
In debug mode...
Hello world!
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

FL1768317420

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

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

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

打赏作者

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

抵扣说明:

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

余额充值