CMake 預定義變數
本帖子適用於初學者,StepByStep的入門CMake,CMake也是一門程式語言,只不過是針對編譯和連結這種程式構建的過程的語言,學習基本語法就可以初步入門,後面需要什麼複雜的功能,進階掌握需要自己去查詢官方文件,後續會給出查閱的一些方式
CMake預定義變數
基本變數
- PROJECT_SOURCE_DIR cmake命令後緊跟的目錄,一般是工程的根目錄
- PROJECT_BINARY_DIR 執行cmake命令的目錄,通常是${PROJECT_SOURCE_DIR}/build
- CMAKE_INCLUDE_PATH 系統環境變數,非cmake變數
- CMAKE_LIBRARY_PATH 系統環境變數,非cmake變數
- CMAKE_CURRENT_SOURCE_DIR 當前處理的CMakeLists.txt所在的路徑
- CMAKE_CURRENT_BINARY_DIR target編譯目錄
使用ADD_SURDIRECTORY(src bin)可以更改此變數的值
SET(EXECUTABLE_OUTPUT_PATH <新路徑>)並不會對此變數有影響,只是改變了最終目標檔案的儲存路徑 - CMAKE_CURRENT_LIST_FILE 輸出呼叫這個變數的CMakeLists.txt的完整路徑
- CMAKE_CURRENT_LIST_LINE 輸出這個變數所在的行
- CMAKE_MODULE_PATH 定義自己的cmake模組所在的路徑
這個變數用於定義自己的cmake模組所在的路徑,如果你的工程比較複雜,有可能自己編寫一些cmake模組,比如SET(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake),然後可以用INCLUDE命令來呼叫自己的模組 - EXECUTABLE_OUTPUT_PATH 重新定義目標二進位制可執行檔案的存放位置
- LIBRARY_OUTPUT_PATH 重新定義目標連結庫檔案的存放位置
- PROJECT_NAME 返回通過PROJECT指令定義的專案名稱
- CMAKE_ALLOW_LOOSE_LOOP_CONSTRUCTS 用來控制IF ELSE語句的書寫方式
環境變數
- 使用$ENV{NAME}可以呼叫系統的環境變數,比如:
MESSAGE(STATUS “HOME dir:”$ENV{HOME}) - 設定環境變數的方式,SET(ENV{name} value)
- 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})
- 自動新增CMAKE_CURRENT_BINARY_DIR和CMAKE_CURRENT_SOURCE_DIR到當前處理
- CMAKE_INCLUDE_DIRECTORIES_PROJECT_BEFORE
- 將工程提供的標頭檔案目錄始終至於系統標頭檔案目錄的前面,當你定義的標頭檔案確實跟系統發
生衝突時可以提供一些幫助。
- 將工程提供的標頭檔案目錄始終至於系統標頭檔案目錄的前面,當你定義的標頭檔案確實跟系統發
- CMAKE_INCLUDE_PATH、CMAKE_LIBRARY_PATH
- 務必注意,這兩個是環境變數而不是cmake變數。
- 使用方法是要在bash中用export或者在csh中使用set命令設定或者CMAKE_INCLUDE_PATH=/home/include cmake ..等方式。
也就是,如果標頭檔案沒有存放在常規路徑(/usr/include, /usr/local/include等),
則可以通過這些變數就行彌補。
比如hello.h存放在/usr/include/hello目錄,所以直接查詢肯定是找不到的。
前面我們直接使用了絕對路徑INCLUDE_DIRECTORIES(/usr/include/hello)告訴工
程這個標頭檔案目錄。為了將程式更智慧一點,
我們可以使用CMAKE_INCLUDE_PATH來進行,使用bash的方法
如下:
export CMAKE_INCLUDE_PATH=/usr/include/hello
然後在標頭檔案中將INCLUDE_DIRECTORIES(/usr/include/hello)替換為:
FIND_PATH(myHeader hello.h)
IF(myHeader)
INCLUDE_DIRECTORIES(${myHeader})
ENDIF(myHeader)上述的一些指令我們在後面會介紹。
這裡簡單說明一下,FIND_PATH用來在指定路徑中搜索檔名,比如:
FIND_PATH(myHeader NAMES hello.h PATHS /usr/include
/usr/include/hello)
這裡我們沒有指定路徑,但是,cmake仍然可以幫我們找到hello.h存放的路徑,就是因
為我們設定了環境變數CMAKE_INCLUDE_PATH。
如果你不使用FIND_PATH,CMAKE_INCLUDE_PATH變數的設定是沒有作用的,你不能指
望它會直接為編譯器命令新增引數-I。
以此為例,CMAKE_LIBRARY_PATH可以用在FIND_LIBRARY中。
同樣,因為這些變數直接為FIND_指令所使用,所以所有使用FIND_指令的cmake模組都
會受益。
系統資訊
- CMAKE_MAJOR_VERSION cmake主版本號,如3.2.2中的3
- CMAKE_MINOR_VERSION cmake次版本號,如3.2.2中的2
- CMAKE_PATCH_VERSION cmake補丁等級,如3.2.2中的2
- CMAKE_SYSTEM 系統名稱,例如Linux-2.6.22
- CAMKE_SYSTEM_NAME 不包含版本的系統名,如Linux
- CMAKE_SYSTEM_VERSION 系統版本,如2.6.22
- CMAKE_SYSTEM_PROCESSOR 處理器名稱,如i686
- UNIX 在所有的類UNIX平臺為TRUE,包括OS X和cygwin
- WIN32 在所有的win32平臺為TRUE,包括cygwin
開關選項
- BUILD_SHARED_LIBS 控制預設的庫編譯方式。如果未進行設定,使用ADD_LIBRARY時又沒有指定庫型別,預設編譯生成的庫都是靜態庫
- CMAKE_C_FLAGS 設定C編譯選項,也可以通過指令ADD_DEFINITIONS()新增
- CMAKE_CXX_FLAGS 設定C++編譯選項,也可以通過指令ADD_DEFINITIONS()新增。
- CMAKE_C_COMPILER:指定C編譯器
- CMAKE_CXX_COMPILER:指定C++編譯器
- CMAKE_BUILD_TYPE::build 型別(Debug, Release, …),CMAKE_BUILD_TYPE=Debug
變數的使用
- 在CMakeLists.txt中指定,使用set
- cmake命令中使用,如cmake -DBUILD_SHARED_LIBS=OFF
相關推薦
CMake 預定義變數
本帖子適用於初學者,StepByStep的入門CMake,CMake也是一門程式語言,只不過是針對編譯和連結這種程式構建的過程的語言,學習基本語法就可以初步入門,後面需要什麼複雜的功能,進階掌握需要自己去查詢官方文件,後續會給出查閱的一些方式
CMake筆記(2)預定義變數
CMake預定義變數 CMAKE_MAJOR_VERSION cmake主版本號,如2.8.6中的2。 CMAKE_MINOR_VERSION cmake次版本號,如2.8.6中的8。 CMAKE
cmake中一些預定義變數
PROJECT_SOURCE_DIR 工程的根目錄PROJECT_BINARY_DIR 執行cmake命令的目錄,通常是${PROJECT_SOURCE_DIR}/buildCMAKE_INCLUDE
Linux Shell基礎 環境變數、位置引數變數、預定義變數
環境變數 環境變數和使用者自定義變數最主要的區別在於,環境變數是全域性變數,而使用者自定義變數是區域性變數。使用者自定義變數只在當前的 Shell 中生效,而環境變數會在當前 Shell 和這個 Shell 的所有子 Shell 中生效。如果把環境變數寫入相應的配
Shell中的預定義變數
Shell中的預定義變數 就是 shell 設計者事先已經定義好的變數,可以直接在 shell 指令碼中使用 基本語法 $$ (功能描述:當前程序的程序號(PID)) $! (功能描述:後臺執行的最後一個程序的程序號(PID)) $? (功能描述:最後一次執行的命令的返回狀態。如果這
nginx自定義變數與內建預定義變數
總覽 nginx可以使用變數簡化配置與提高配置的靈活性,所有的變數值都可以通過這種方式引用: $變數名 而nginx中的變數分為兩種,自定義變數與內建預定義變數 內建變數 宣告 可以在sever,http,location等標籤中使用set命令(非唯一)宣告變數,語
PHP_Day03_預定義變數
<?php /* 介紹:預定義變數 作者:趙某~ 時間:2018/11/5 */ // 預定義的儲存全域性變數的陣列 $GLOBALS $var = 'Xust'; echo $var.'<br>'; # 訪問某個全域性變數方
php幾個預定義變數 SERVER 'DOCUMENT ROOT'
<?phpecho 'documentroot:'.$_SERVER['DOCUMENT_ROOT'].'<br>'; //根目錄,在apache的配置檔案裡定義:httpd.conf 比如:DocumentRoot "D:/work/php_root"ech
Linux基礎學習之Shell基礎——Bash變數——預定義變數
1、預定義變數 預定義變數 作用 $? 最後一次執行的命令的返回狀態。如果這個變數的值為,證明上一個命令正確執行;如果這個變數的值為非0(具體是哪個數,由命令自己來決定),則證明上一個命令執行不正確了。
MATLAB的使用(四)運算子、關係與邏輯函式說明以及預定義變數名說明
四則表示式關係操作符和邏輯操作符及其功能: 關係操作符: < 表示小於; = 表示大於等於; 表示大於 ; == 表示等於; ~= 表示約等於; 邏輯操作符: &am
Linux Shell中的變數-預定義變數
參考:《Linux命令 / 編輯器與Shell程式設計》 ################################################ note that :與其他程式語言不同,Bash中的變數沒有資料型別的區別,變數中的值都是以字串的形式儲存的,如果
PHP中的預定義變數$_SERVER引數詳解
在PHP編碼中,經常遇到需要使用位址列的資訊,比如域名、訪問的URL、URL帶的引數等,這些資訊PHP伺服器都存在了預定義變數$_SERVER中。文件解釋:$_SERVER 是一個包含了諸如
makefile專題:預定義變數的使用
關鍵詞: makefile中預定義的變數、自動變數的含義、特殊變數的含義 1. makefile中預定義的變數 自動變數: [email protected], $^, $<
C++中幾個預定義變數的介紹
在C++程式設計中,有幾個預定義變數,這幾個預定義變數在使用的時候很方便。比如,在C++中中為了獲取時間,常常需要借用C語言的藉口time或者CTime類,然後如果是簡單的獲取時間,通過
makefile 的主要預定義變數及常用命令列選項
預定義變數 含義$* 不包含副檔名的目標檔名稱。$+ 所有的依賴檔案,以空格分開,並以出現的先後為序,可能包含重複的依賴檔案。$< 第一個依
【php手冊:變數】預定義變數
'argc'包含命令列模式下傳遞給該指令碼的引數的數目(如果執行在命令列模式下)。' GATEWAY_INTERFACE '伺服器使用的 CGI 規範的版本。'SERVER_ADDR'當前執行指令碼所在的伺服器的 IP 地址。例:::1'SERVER_NAME'當前執行指令碼所在的伺服器的主機名。例:loca
Shell入門知識5——預定義變數
基本介紹 shell已經定義好的變數,可以在shell指令碼直接使用。 基本語法 $$ 當前程序的程序號 $! 後臺執行的最後一個程序的程序號 $? 最後一次執行的命令的
shell的預定義變數
1. 預定義變數 預定義變數和環境變數相類似,也是在Shell一開始時就定義了的變數。所不同的是,使用者只能根據Shell的定義來使用這些變數,而不能重定義它。所有預定義變數都是由$符和另一個符號組成的,常用的Shell預定義變數如下表所示 變數名 含義
2.awk預定義變數
預定義變數 就是awk事先定義的變數,不需要自定義就能直接驚醒使用的變數。 這裡介紹 FS OFS RS ORS NR FNR NF FILENAME的簡單用法。 $n 前面已經講過 表示第n個欄位 $0 表示整條記錄 FS filed separater 欄
Shell-一個shell學習預定義變數
預定義變數 $# 命令列中引數的個數 $* 所有位置引數的內容 $? 上一條命令執行後返回的結果狀態 0 成功 非0 執行異常或者錯誤 $$ 當前程序的程序號 $! 後臺執行的最後一個程序號$0 當