日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

cmake:add_definitions

發布時間:2024/1/18 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 cmake:add_definitions 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

此文為:輕松入門cmake系列教程

引言

其實這個函數在安裝一些庫的時候,它的CMakeLists里面就有這樣的函數。典型的就是opencv了。

opencv安裝時候有一些指令也是針對這個函數的,比如安裝命令:

cmake ../opencv-3.4.1 -DWITH_GTK_2_X=ON -DCMAKE_INSTALL_PREFIX=/usr/local \ -DCMAKE_BUILD_TYPE=RELEASE -DCMAKE_INSTALL_PREFIX=/usr/local -DWITH_TBB=ON\-DBUILD_NEW_PYTHON_SUPPORT=ON -DWITH_V4L=ON -DINSTALL_C_EXAMPLES=ON \-DINSTALL_PYTHON_EXAMPLES=ON -DBUILD_EXAMPLES=ON -DWITH_OPENGL=ON \-DENABLE_FAST_MATH=1 -DCUDA_FAST_MATH=1 -DWITH_CUBLAS=1 -DWITH_OPENMP=ON

其中-D后面的參數就是控制程序流向。

官方文檔

  • 為當前目錄中的目標(在調用此命令之前或之后添加的目標)以及在此之后添加的子目錄中的目標添加定義到編譯器命令行。此命令可用于添加任何標志,但它的目的是添加預處理器定義。
  • 注意此命令已被替代:
    • 使用add_compile_definitions()添加預處理器定義。
    • 使用include_directories()添加包含目錄。
    • 使用add_compile_options()添加其他選項。
  • 以-D或/D開頭的看起來像預處理器定義的標志,會自動添加到當前目錄的COMPILE_DEFINITIONS目錄屬性中。
  • 為了向后兼容,具有重要值的定義可以保留在標志集合中,而不是進行轉換。

官方文檔

用處

看源碼時使用

這種可以在我們更改別人代碼做實驗時使用,既不對其源碼進行破壞,又可以添加自己的功能。之前都是在程序中進行#define,有了這個后可以直接在編譯的時候進行選擇。具體的,在工程CMakeLists.txt 中,使用add_definitions()函數控制代碼的開啟和關閉:

option(TEST_DEBUG "option for debug" OFF) if (TEST_DEBUG) add_definitions(-DTEST_DEBUG) endif(TEST_DEBUG)

運行構建項目的時候可以添加參數控制宏的開啟和關閉.

cmake -DUSE_MACRO = on .. #打開 cmake  -DUSE_MACRO=off .. #關閉

在源碼中就可以使用:

#ifdef TEST_DEBUG ... ... #else ... #endif

來對程序進行控制。

定義變量直接在程序中使用

CMakeList.txt

add_definitions(-DHAVE_CONFIG_H-DCONFIG_DIR="/etc/netdata" )

main.c

int main(int argc, char **argv) {printf("%d\n", HAVE_CONFIG_H);printf("%s\n", CONFIG_DIR); }

總結

以上是生活随笔為你收集整理的cmake:add_definitions的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。