本文使用的相關(guān)軟件環(huán)境信息如下:
軟件名稱 | 軟件版本 |
---|---|
Linux操作系統(tǒng) | Ubuntu 22.04 LTS(X64) |
cmake | 3.22.1 |
g++ | 11.4.0 |
-
add_compile_definitions
命令格式:
add_compile_definitions(<definition> ...)
該命令用于編譯源文件時添加預(yù)處理定義镜雨,最終會添加到
COMPILE_DEFINITIONS
屬性(當(dāng)前CMakeLists文件所在的目錄和包含的構(gòu)建目標(biāo)都會添加)中讨勤。預(yù)處理定義的格式為VAR或VAR=value矮烹,CMake負(fù)責(zé)將指定的定義轉(zhuǎn)換成本地構(gòu)建系統(tǒng)可識別的值。對于C/C++編譯器來說夭织,就是會將此函數(shù)添加的預(yù)定義命令最終編譯的時候使用-D參數(shù)添加到編譯命令行中。注意:CMake 3.26版本之后,變量中的前導(dǎo)-D會被移除畅厢。
下面來簡單的測試一下番宁,新建兩個文件元莫,CMakeLists.txt和main.cpp。
main.cpp文件內(nèi)容:如果定義了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文件內(nèi)容:添加了預(yù)處理標(biāo)志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
查看完成的編譯過程棋电,關(guān)鍵信息如下茎截,可以看到預(yù)定義選項已經(jīng)通過-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
結(jié)果如下:$ ./main In debug mode... Hello world!