CMake编译命令add_compile_definitions简介

本文使用的相关软件环境信息如下:

软件名称 软件版本
Linux操作系统 Ubuntu 22.04 LTS(X64)
cmake 3.22.1
g++ 11.4.0
  • 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!
    
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容