1.一般變量
1)CMake變量引用的方式
使用${}進行變量的引用。例如:
${PROJECT_NAME} #返回項目名稱
在 IF 等語句中,是直接使用變量名而不通過${}取值。
2)cmake自定義變量的方式
cmake變量定義的方式有兩種:隱式定義和顯式定義。
隱式定義
前面舉了一個隱式定義的例子,就是PROJECT指令,他會隱式的定義
顯示定義
顯式定義的例子我們前面也提到了,使用 SET 指令,就可以構建一個自定義變量了。
比如:
SET(HELLO_SRC main.c)
就可以通過${HELLO_SRC}來引用這個自定義變量(main.c)了.
2. 環境變量
1)調用環境變量的方式
使用 $ENV{NAME} 指令就可以調用系統的環境變量了。
比如
MESSAGE(STATUS “HOME dir: $ENV{HOME}”)
2)設置環境變量的方式
SET(ENV{ 變量名 } 值 )
3. CMake常用變量
變量名 | 變量說明 |
---|---|
PROJECT_NAME | 返回通過PROJECT指令定義的項目名稱 |
PROJECT_SOURCE_DIR | CMake源碼地址,即cmake命令后指定的地址 |
PROJECT_BINARY_DIR | 運行cmake命令的目錄,通常是PROJECT_SOURCE_DIR下的build目錄 |
CMAKE_MODULE_PATH | 定義自己的cmake模塊所在的路徑 |
CMAKE_CURRENT_SOURCE_DIR | 當前處理的CMakeLists.txt所在的路徑 |
CMAKE_CURRENT_LIST_DIR | 當前文件夾路徑 |
CMAKE_CURRENT_LIST_FILE | 輸出調用這個變量的CMakeLists.txt的完整路徑 |
CMAKE_CURRENT_LIST_LINE | 輸出這個變量所在的行 |
CMAKE_RUNTIME_OUTPUT_DIRECTORY | 生成可執行文件路徑 |
CMAKE_LIBRARY_OUTPUT_DIRECTORY | 生成庫的文件夾路徑 |
CMAKE_BUILD_TYPE | 指定基於make的產生器的構建類型(Release,Debug) |
CMAKE_C_FLAGS | *.C文件編譯選項,如 -std=c99 -O3 -march=native |
CMAKE_CXX_FLAGS | *.CPP文件編譯選項,如 -std=c++11 -O3 -march=native |
CMAKE_CURRENT_BINARY_DIR | target編譯目錄 |
CMAKE_INCLUDE_PATH | 環境變量,非cmake變量 |
CMAKE_LIBRARY_PATH | 環境變量 |
CMAKE_STATIC_LIBRARY_PREFIX | 靜態庫前綴, Linux下默認為lib |
CMAKE_STATIC_LIBRARY_SUFFIX | 靜態庫后綴,Linux下默認為.a |
CMAKE_SHARED_LIBRARY_PREFIX | 動態庫前綴,Linux下默認為lib |
CMAKE_SHARED_LIBRARY_SUFFIX | 動態庫后綴,Linux下默認為.so |
BUILD_SHARED_LIBS | 如果為ON,則add_library默認創建共享庫 |
CMAKE_INSTALL_PREFIX | 配置安裝路徑,默認為/usr/local |
CMAKE_ABSOLUTE_DESTINATION_FILES | 安裝文件列表時使用ABSOLUTE DESTINATION 路徑 |
CMAKE_AUTOMOC_RELAXED_MODE | 在嚴格和寬松的automoc模式間切換 |
CMAKE_BACKWARDS_COMPATIBILITY | 構建工程所需要的CMake版本 |
CMAKE_COLOR_MAKEFILE | 開啟時,使用Makefile產生器會產生彩色輸出 |
CMAKE_ALLOW_LOOSE_LOOP_CONSTRUCTS | 用來控制IF ELSE語句的書寫方式 |
4.系統信息
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
5.主要的開關選項:
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() 添加。