cmake 常用變量和常用環境變量


cmake 常用變量和常用環境變量

一.cmake 變量引用的方式

  前面我們已經提到了,使用${ }進行變量的引用。在 IF 等語句中,是直接使用變量名而不通過${ }取值.

 

二.cmake 自定義變量的方式

  主要有隱式定義和顯式定義兩種,前面舉了一個隱式定義的例子,就是 PROJECT 指令,他會隱式的定義“<projectname>_BINARY_DIR ”和“<projectname>_SOURCE_DIR ”兩個變量。

使用 SET 指令,就可以構建一個自定義變量了。比如:

SET(HELLO_SRC    main.SOURCE_PATH)    #main.SOURCE_PATH代表main.cpp的路徑

這樣就可以通過${HELLO_SRC}來引用這個自定義變量了.

 

三.cmake 常用變量

1.CMAKE_BINARY_DIR

   PROJECT_BINARY_DIR

   <projectname>_BINARY_DIR

  這三個變量指代的內容是一致的,如果是內部編譯,指得就是工程頂層目錄;如果是外部編譯,指的是工程編譯發生的目錄。

PROJECT_BINARY_DIR 跟其他指令稍有區別,現在,你可以理解為他們是一致的。

2.CMAKE_SOURCE_DIR

   PROJECT_SOURCE_DIR

   <projectname>_SOURCE_DIR

  這三個變量指代的內容是一致的,不論采用何種編譯方式,都是工程頂層目錄。也就是在內部編譯時,他跟 CMAKE_BINARY_DIR 等變量一致。

PROJECT_SOURCE_DIR 跟其他指令稍有區別,現在,你可以理解為他們是一致的。

3.CMAKE_CURRENT_SOURCE_DIR

  指的是當前處理的 CMakeLists.txt 所在的路徑,比如上面我們提到的 src 子目錄。

4.CMAKE_CURRRENT_BINARY_DIR

  如果是內部編譯,它跟 CMAKE_CURRENT_SOURCE_DIR 一致,如果是外部編譯,他指的是 target 編譯目錄。

使用我們上面提到的 ADD_SUBDIRECTORY(src   bin)可以更改這個變量的值。

使用 SET(EXECUTABLE_OUTPUT_PATH    <新路徑>)並不會對這個變量造成影響,它僅僅修改了最終目標文件存放的路徑。

5.CMAKE_CURRENT_LIST_FILE

  輸出調用這個變量的 CMakeLists.txt 的完整路徑

6.CMAKE_CURRENT_LIST_LINE

  輸出這個變量所在的行

7.CMAKE_MODULE_PATH

  這個變量用來定義自己的 cmake 模塊所在的路徑。如果你的工程比較復雜,有可能會自己編寫一些 cmake 模塊,這些 cmake 模塊是隨你的工程發布的,為了讓 cmake 在處理CMakeLists.txt 時找到這些模塊,你需要通過 SET 指令,將自己的 cmake 模塊路徑設置一下。

比如:

SET(CMAKE_MODULE_PATH    ${PROJECT_SOURCE_DIR}/cmake) 

 #  ${PROJECT_SOURCE_DIR}為絕對路徑

#   /cmake 為相對路徑

這時候你就可以通過 INCLUDE 指令來調用自己的模塊了。

8.EXECUTABLE_OUTPUT_PATH 和 LIBRARY_OUTPUT_PATH

  分別用來重新定義最終結果的存放目錄。

9.PROJECT_NAME

  返回通過 PROJECT 指令定義的項目名稱。

 

四.cmake 調用環境變量的方式

使用$ENV{NAME}指令就可以調用系統的環境變量了。

比如:MESSAGE(STATUS “HOME   dir: $ENV{HOME}”)

設置環境變量的方式是:

SET(ENV{變量名}   值)

1.CMAKE_INCLUDE_CURRENT_DIR

  自動添加 CMAKE_CURRENT_BINARY_DIR 和 CMAKE_CURRENT_SOURCE_DIR 到當前處理的 CMakeLists.txt。相當於在每個 CMakeLists.txt 加入:

INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR})

2.CMAKE_INCLUDE_DIRECTORIES_PROJECT_BEFORE

  將工程提供的頭文件目錄始終至於系統頭文件目錄的前面,當你定義的頭文件確實跟系統發生沖突時可以提供一些幫助。

3.CMAKE_INCLUDE_PATH 和 CMAKE_LIBRARY_PATH

  如果頭文件和庫文件沒有存放在常規路徑(/usr/include, /usr/local/include 等),則可以通過這些變量進行設置。

 

五.系統信息

1.CMAKE_MAJOR_VERSION           CMAKE 主版本號,比如 2.4.6 中的 2

2.CMAKE_MINOR_VERSION            CMAKE 次版本號,比如 2.4.6 中的 4

3.CMAKE_PATCH_VERSION            CMAKE 補丁等級,比如 2.4.6 中的 6

4.CMAKE_SYSTEM                           系統名稱,比如 Linux-2.6.22

5.CMAKE_SYSTEM_NAME               不包含版本的系統名,比如 Linux

6.CMAKE_SYSTEM_VERSION         系統版本,比如 2.6.22

7.CMAKE_SYSTEM_PROCESSOR  處理器名稱,比如 i686.

8.UNIX                                                在所有的類 UNIX 平台為 TRUE,包括 OS X 和 cygwin

9.WIN32                                              在所有的 win32 平台為 TRUE,包括 cygwin

 

六.主要的開關選項

1.CMAKE_ALLOW_LOOSE_LOOP_CONSTRUCTS

  用來控制 IF ELSE 語句的書寫方式。

2.BUILD_SHARED_LIBS

  這個開關用來控制默認的庫編譯方式,如果不進行設置,使用ADD_LIBRARY 並沒有指定庫類型的情況下,默認編譯生成的庫都是靜態庫。

如果 SET(BUILD_SHARED_LIBS    ON)  后,默認生成的為動態庫。

3.CMAKE_C_FLAGS

  設置 C 編譯選項,也可以通過指令 ADD_DEFINITIONS()添加。

4.CMAKE_CXX_FLAGS

  設置 C++編譯選項,也可以通過指令 ADD_DEFINITIONS()添加。

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM