ctest - Testing driver provided by CMake.
ctest [options]
「ctest」可執行檔是 CMake 測試驅動程式。為使用 ENABLE_TESTING 和 ADD_TEST 命令的專案建立的 CMake 產生建構樹狀結構具有測試支援。此程式將執行測試並報告結果。
-C <cfg>, --build-config <cfg>
-V,--verbose
-VV,--extra-verbose
--debug
-Q,--quiet
-O <file>, --output-log <file>
-N,--show-only
-R <regex>, --tests-regex <regex>
-E <regex>, --exclude-regex <regex>
-D <dashboard>, --dashboard <dashboard>
-M <model>, --test-model <model>
-T <action>, --test-action <action>
--track <track>
-S <script>, --script <script>
-SP <script>, --script-new-process <script>
-A <file>, --add-notes <file>
-I [開始,結束,間隔,測試編號,測試編號|測試檔案], --tests-information
-U, --union
--interactive-debug-mode [0|1]
--build-and-test
--build-target
--build-nocmake
--build-run-dir
--build-two-config
--build-exe-dir
--build-generator
--build-project
--build-makeprogram
--build-noclean
--build-config-sample
--build-options
--test-command
--test-timeout
--tomorrow-tag
--ctest-config
--overwrite
--extra-submit <file>[;<file>]
--force-new-ctest-process
--submit-index
-C <cfg>, --build-config <cfg>
: 選擇要測試的組態。某些 CMake 產生的建構樹狀結構可以在同一個樹狀結構中擁有多個建構組態。此選項可用於指定應測試哪個組態。範例組態為「Debug」和「Release」。
-V,--verbose
: 啟用來自測試的詳細輸出。測試輸出通常會被抑制,並且僅顯示摘要資訊。此選項將顯示所有測試輸出。
-VV,--extra-verbose
: 啟用來自測試的更詳細輸出。測試輸出通常會被抑制,並且僅顯示摘要資訊。此選項將顯示更多測試輸出。
--debug
: 顯示 CTest 的更多詳細內部資訊。此功能會產生大量輸出,主要用於偵錯儀表板問題。
-Q,--quiet
: 使 ctest 靜音。此選項將抑制所有輸出。如果指定了 --output-log,仍會產生輸出記錄檔。如果指定了 --quiet,則會忽略諸如 --verbose、--extra-verbose 和 --debug 之類的選項。
-O <file>, --output-log <file>
: 輸出到記錄檔此選項會告知 ctest 將其所有輸出寫入記錄檔。
-N,--show-only
: 停用測試的實際執行。此選項會告知 ctest 列出將要執行的測試,但不實際執行它們。與 -R 和 -E 選項結合使用時很有用。
-R <regex>, --tests-regex <regex>
: 執行符合正規表示式的測試。此選項會告知 ctest 僅執行名稱與給定正規表示式相符的測試。
-E <regex>, --exclude-regex <regex>
: 排除符合正規表示式的測試。此選項會告知 ctest 不要執行名稱與給定正規表示式相符的測試。
-D <dashboard>, --dashboard <dashboard>
: 執行儀表板測試此選項會告知 ctest 作為 Dart 用戶端執行並執行儀表板測試。所有測試都是 <模式><測試>,其中模式可以是 Experimental、Nightly 和 Continuous,而測試可以是 Start、Update、Configure、Build、Test、Coverage 和 Submit。
-M <model>, --test-model <model>
: 設定儀表板的模型此選項會告知 ctest 作為 Dart 用戶端,其中 TestModel 可以是 Experimental、Nightly 和 Continuous。結合 -M 和 -T 類似於 -D
-T <action>, --test-action <action>
: 設定要執行的儀表板動作此選項會告知 ctest 作為 Dart 用戶端並執行一些動作,例如 start、build、test 等。結合 -M 和 -T 類似於 -D
--track <track>
: 指定要將儀表板提交到的追蹤將儀表板提交到指定的追蹤,而不是預設的追蹤。依預設,儀表板會提交到 Nightly、Experimental 或 Continuous 追蹤,但透過指定此選項,追蹤可以是任意的。
-S <script>, --script <script>
: 執行組態的儀表板此選項會告知 ctest 載入組態腳本,該腳本會設定許多參數,例如二進位檔和原始目錄。然後 ctest 將執行建立和執行儀表板所需的操作。此選項基本上會設定儀表板,然後使用適當的選項執行 ctest -D。
-SP <script>, --script-new-process <script>
: 執行組態的儀表板此選項會執行與 -S 相同的操作,但會在不同的程序中執行。這主要在腳本可能會修改環境,且您不希望修改後的環境影響其他 -S 腳本的情況下很有用。
-A <file>, --add-notes <file>
: 新增提交的備註檔案此選項會告知 ctest 在提交儀表板時包含備註檔案。
-I [Start,End,Stride,test#,test#|Test file], --tests-information
: 依編號執行特定數量的測試。此選項會使 ctest 從編號 Start 開始執行測試,到編號 End 結束,並以間隔 Stride 遞增。Stride 之後的任何其他數字都會被視為個別測試編號。Start、End 或 Stride 可以為空。選擇性地,可以提供一個包含與命令列相同語法的檔案。
-U, --union
: 取 -I 和 -R 的聯集當同時指定 -R 和 -I 時,預設會執行測試的交集。透過指定 -U,會改為執行測試的聯集。
--interactive-debug-mode [0|1]
: 將互動模式設定為 0 或 1。此選項會使 ctest 在互動模式或非互動模式下執行測試。在 Windows 上,這表示在非互動模式下,所有系統偵錯彈出視窗都會被封鎖。在儀表板模式(Experimental、Nightly、Continuous)中,預設為非互動模式。當僅執行測試而不是針對儀表板時,預設為允許彈出視窗和互動偵錯。
--build-and-test
: 設定、建構和執行測試。此選項會告知 ctest 設定(即對其執行 cmake)、建構和/或執行測試。設定和測試步驟是選擇性的。此命令列的引數是原始和二進位目錄。依預設,除非指定了 --build-nocmake,否則這將在指定的 Source/Bin 目錄上執行 CMake。必須提供 --build-makeprogram 和 --build-generator 才能使用 --built-and-test。如果指定了 --test-command,則會在建構完成後執行該命令。影響此模式的其他選項包括 --build-target --build-nocmake、--build-run-dir、--build-two-config、--build-exe-dir、--build-project、--build-noclean 和 --build-options
--build-target
: 指定要建構的特定目標。此選項與 --build-and-test 選項一起使用,如果省略,則會建構 all 目標。
--build-nocmake
: 在不先執行 cmake 的情況下執行建構。跳過 cmake 步驟。
--build-run-dir
: 指定從中執行程式的目錄。程式編譯後所在的目錄。
--build-two-config
: 執行 CMake 兩次--build-exe-dir
: 指定可執行檔的目錄。--build-generator
: 指定要使用的產生器。--build-project
: 指定要建構的專案名稱。--build-makeprogram
: 指定要使用的 make 程式。--build-noclean
: 跳過 make clean 步驟。--build-config-sample
: 用於確定組態的範例可執行檔用於確定應使用之組態的範例可執行檔。例如,Debug/Release/等
--build-options
: 將額外的選項新增至建構步驟。此選項必須是最後一個選項,除了 --test-command 之外
--test-command
: 使用 --build-and-test 選項執行的測試。--test-timeout
: 時間限制(以秒為單位),僅供內部使用。--tomorrow-tag
: 夜間或實驗性測試以下一天的標籤開始。如果建構不會在一天內完成,則此功能很有用。
--ctest-config
: 用於在提交儀表板時初始化 CTest 狀態的組態檔。此選項會告知 CTest 使用不同的初始化檔案,而非 CTestConfiguration.tcl。如此一來,可以使用多個初始化檔案,例如提交到多個儀表板。
--overwrite
:覆寫 CTest 設定選項。預設情況下,ctest 會使用設定檔中的設定選項。此選項將會覆寫設定選項。
--extra-submit <file>[;<file>]
:將額外檔案提交到儀表板。此選項會將額外檔案提交到儀表板。
--force-new-ctest-process
:以新程序執行子 CTest 實例預設情況下,CTest 會在同一個程序中執行子 CTest 實例。如果不需要此行為,此參數會強制子 CTest 程序使用新的程序。
--submit-index
:提交具有特定索引的個別儀表板測試此選項允許執行相同的 CTest 動作 (例如測試) 多次,並將所有階段提交到同一個儀表板 (需要 Dart2)。每次執行都需要不同的索引。
此平台上可用的產生器如下
break
build_name
cmake_minimum_required
cmake_policy
configure_file
ctest_build
ctest_configure
ctest_coverage
ctest_empty_binary_directory
ctest_memcheck
ctest_read_custom_files
ctest_run_script
ctest_sleep
ctest_start
ctest_submit
ctest_test
ctest_update
else
elseif
endforeach
endfunction
endif
endmacro
endwhile
exec_program
execute_process
file
find_file
find_library
find_package
find_path
find_program
foreach
function
get_cmake_property
get_directory_property
get_filename_component
get_property
if
include
list
macro
make_directory
mark_as_advanced
math
message
option
remove
return
separate_arguments
set
set_directory_properties
set_property
site_name
string
unset
variable_watch
while
write_file
break
:從封閉的 foreach 或 while 迴圈中跳脫。break()
從封閉的 foreach 迴圈或 while 迴圈中跳脫
build_name
:已棄用。請改用 ${CMAKE_SYSTEM} 和 ${CMAKE_CXX_COMPILER}。build_name(variable)
將指定的變數設定為代表平台和編譯器設定的字串。這些值現在可透過 CMAKE_SYSTEM 和 CMAKE_CXX_COMPILER 變數取得。
cmake_minimum_required
:設定專案所需的最低 cmake 版本。cmake_minimum_required(VERSION major[.minor[.patch]]
[FATAL_ERROR])
如果目前的 CMake 版本低於要求的版本,它將會停止處理專案並報告錯誤。當指定的版本高於 2.4 時,命令會隱式呼叫
cmake_policy(VERSION major[.minor[.patch]])
這會將 cmake 原則版本層級設定為指定的版本。當給定的版本為 2.4 或更低時,命令會隱式呼叫
cmake_policy(VERSION 2.4)
這會啟用適用於 CMake 2.4 和更低版本的相容性功能。
CMake 2.6 及更高版本接受 FATAL_ERROR 選項,但會忽略它。應該指定它,以便 CMake 2.4 和更低版本會因錯誤而失敗,而不僅僅是警告。
cmake_policy
:管理 CMake 原則設定。隨著 CMake 的發展,有時必須變更現有行為,以修正錯誤或改進現有功能的實作。CMake 原則機制旨在協助讓現有專案在新的 CMake 版本導入行為變更時,仍能繼續建置。每個新的原則 (行為變更) 都會給予 "CMP<NNNN>" 形式的識別碼,其中 "<NNNN>" 是整數索引。與每個原則關聯的文件會描述 OLD 和 NEW 行為,以及導入原則的原因。專案可以設定每個原則來選取想要的行為。當 CMake 需要知道要使用哪個行為時,它會檢查專案指定的設定。如果沒有可用的設定,則會假設 OLD 行為,並產生警告,要求設定原則。
cmake_policy 命令用於將原則設定為 OLD 或 NEW 行為。雖然支援個別設定原則,但我們鼓勵專案根據 CMake 版本設定原則。
cmake_policy(VERSION major.minor[.patch])
指定目前的 CMake 清單檔是針對給定的 CMake 版本所撰寫。在指定版本或更早版本中導入的所有原則都將設定為使用 NEW 行為。在指定版本之後導入的所有原則都將重設為使用 OLD 行為,並產生警告。這會有效地要求給定 CMake 版本所偏好的行為,並告知較新的 CMake 版本警告他們的新原則。指定的原則版本必須至少為 2.4,否則命令會報告錯誤。為了獲得支援早於 2.4 版本的相容性功能,請參閱原則 CMP0001 的文件。
cmake_policy(SET CMP<NNNN> NEW)
cmake_policy(SET CMP<NNNN> OLD)
告知 CMake 針對給定的原則使用 OLD 或 NEW 行為。相依於給定原則舊行為的專案,可以透過將原則狀態設定為 OLD 來消除原則警告。或者,可以修正專案以使用新行為,並將原則狀態設定為 NEW。
cmake_policy(GET CMP<NNNN> <variable>)
檢查給定的原則是否設定為 OLD 或 NEW 行為。如果設定了原則,則輸出變數值將為 "OLD" 或 "NEW",否則為空。
CMake 會在堆疊上保留原則設定,因此 cmake_policy 命令所做的變更只會影響堆疊的頂端。每個子目錄都會自動管理原則堆疊上的新項目,以保護其父目錄和同級目錄。CMake 也會為 include() 和 find_package() 命令載入的腳本管理新項目,除非使用 NO_POLICY_SCOPE 選項叫用 (另請參閱原則 CMP0011)。cmake_policy 命令提供了一個介面來管理原則堆疊上的自訂項目
cmake_policy(PUSH)
cmake_policy(POP)
每個 PUSH 都必須有相符的 POP,才能清除任何變更。這對於暫時變更原則設定很有用。
函式和巨集會在建立時記錄原則設定,並在叫用時使用預先記錄的原則。如果函式或巨集實作設定了原則,則變更會自動透過呼叫端向上傳播,直到它們到達最近的巢狀原則堆疊項目。
configure_file
:將檔案複製到另一個位置並修改其內容。configure_file(InputFile OutputFile
[COPYONLY] [ESCAPE_QUOTES] [@ONLY])
輸入和輸出檔案必須具有完整路徑。此命令會將輸入檔案中以 ${VAR} 或 @VAR@ 參考的任何變數,取代為 CMake 判定的值。如果變數未定義,則會以空值取代。如果指定 COPYONLY,則不會進行變數展開。如果指定 ESCAPE_QUOTES,則任何取代的引號都會以 C 樣式跳脫。檔案將會使用 CMake 變數的目前值進行設定。如果指定 @ONLY,則只會取代 @VAR@ 形式的變數,而 ${VAR} 會被忽略。這對於設定使用 ${VAR} 的腳本很有用。任何出現的 #cmakedefine VAR 都會根據 CMake 中 VAR 的設定,取代為 #define VAR 或 /* #undef VAR */
ctest_build
:建置儲存庫。ctest_build([BUILD build_dir] [RETURN_VALUE res])
建置給定的建置目錄,並將結果儲存在 Build.xml 中。
ctest_configure
:設定儲存庫。ctest_configure(BUILD build_dir RETURN_VALUE res)
設定給定的建置目錄,並將結果儲存在 Configure.xml 中。第二個引數是一個將會保存傳回值的變數。
ctest_coverage
:測試儲存庫。ctest_coverage([BUILD build_dir] [RETURN_VALUE res])
執行給定建置目錄的涵蓋範圍,並將結果儲存在 Coverage.xml 中。第二個引數是一個將會保存值的變數。
ctest_empty_binary_directory
:清空二進位目錄ctest_empty_binary_directory( directory )
移除二進位目錄。此命令會在刪除目錄之前執行一些檢查,以嘗試避免惡意或意外的目錄刪除。
ctest_memcheck
:測試儲存庫。ctest_memcheck([BUILD build_dir] [RETURN_VALUE res])
對給定建置目錄中的測試執行記憶體檢查,並將結果儲存在 MemCheck.xml 中。第二個引數是一個將會保存值的變數。
ctest_read_custom_files
:讀取 CTestCustom 檔案。ctest_read_custom_files( directory ... )
從給定目錄讀取所有 CTestCustom.ctest 或 CTestCustom.cmake 檔案。
ctest_run_script
:執行 ctest -S 指令碼ctest_run_script([NEW_PROCESS] script_file_name script_file_name1
script_file_name2 ...)
執行指令碼,就像從 ctest -S 執行一樣。如果沒有提供引數,則會使用變數的目前設定來執行目前的指令碼。如果指定 NEW_PROCESS,則每個指令碼都會在不同的程序中執行。
ctest_sleep
:睡眠一段時間ctest_sleep( seconds )
ctest_sleep( time1 duration time2 )
如果使用一個引數,它會睡眠給定的秒數。如果使用三個引數,它會等待 time2 - time1 - duration 秒。
ctest_start
:開始給定模型的測試ctest_start(Model [TRACK <track>] [source [binary]])
開始給定模型的測試。此命令應在初始化二進位目錄後呼叫。如果未指定「來源」和「二進位」目錄,它會讀取 CTEST_SOURCE_DIRECTORY 和 CTEST_BINARY_DIRECTORY。如果指定了追蹤,則提交將會傳送到指定的追蹤。
ctest_submit
:提交儲存庫。ctest_submit([RETURN_VALUE res])
提交專案的測試結果。
ctest_test
:測試儲存庫。ctest_test([BUILD build_dir]
[START start number] [END end number]
[STRIDE stride number] [EXCLUDE exclude regex ]
[INCLUDE include regex] [RETURN_VALUE res] )
測試給定的建置目錄,並將結果儲存在 Test.xml 中。第二個引數是一個將會保存值的變數。或者,您可以指定起始測試編號 START、結束測試編號 END、每次測試之間要略過的測試數目 STRIDE、要執行的測試的規則運算式 INCLUDE,或不要執行的測試的規則運算式 EXCLUDE。
ctest_update
:更新儲存庫。ctest_update([SOURCE source] [RETURN_VALUE res])
更新指定的來源目錄,並將結果儲存在 Update.xml 中。第二個參數是一個變數,將會保存修改的檔案數量。如果發生問題,該變數的值將會是 -1。
else
:開始一個 if 區塊的 else 部分。else(expression)
請參閱 if 命令。
elseif
:開始一個 if 區塊的 elseif 部分。elseif(expression)
請參閱 if 命令。
endforeach
:結束一個 FOREACH 區塊中的命令列表。endforeach(expression)
請參閱 FOREACH 命令。
endfunction
:結束一個 function 區塊中的命令列表。endfunction(expression)
請參閱 function 命令。
endif
:結束一個 if 區塊中的命令列表。endif(expression)
請參閱 if 命令。
endmacro
:結束一個 macro 區塊中的命令列表。endmacro(expression)
請參閱 macro 命令。
endwhile
:結束一個 while 區塊中的命令列表。endwhile(expression)
請參閱 while 命令。
exec_program
:已棄用。請改用 execute_process() 命令。在處理 CMakeList.txt 檔案期間執行一個可執行程式。
exec_program(Executable [directory in which to run]
[ARGS <arguments to executable>]
[OUTPUT_VARIABLE <var>]
[RETURN_VALUE <var>])
可執行檔會在可選擇指定的目錄中執行。如果可執行檔使用雙引號括住,可以包含引數,但最好使用可選的 ARGS 引數來指定程式的引數。這是因為 cmake 屆時將能夠對可執行檔路徑中的空格進行轉義。可選的 OUTPUT_VARIABLE 引數指定一個變數來儲存輸出。若要擷取執行的傳回值,請提供 RETURN_VALUE。如果指定了 OUTPUT_VARIABLE,則不會有任何輸出傳送到執行 cmake 的主控台的 stdout/stderr。
execute_process
:執行一個或多個子程序。execute_process(COMMAND <cmd1> [args1...]]
[COMMAND <cmd2> [args2...] [...]]
[WORKING_DIRECTORY <directory>]
[TIMEOUT <seconds>]
[RESULT_VARIABLE <variable>]
[OUTPUT_VARIABLE <variable>]
[ERROR_VARIABLE <variable>]
[INPUT_FILE <file>]
[OUTPUT_FILE <file>]
[ERROR_FILE <file>]
[OUTPUT_QUIET]
[ERROR_QUIET]
[OUTPUT_STRIP_TRAILING_WHITESPACE]
[ERROR_STRIP_TRAILING_WHITESPACE])
執行給定的一個或多個命令序列,每個程序的標準輸出會通過管道傳送到下一個程序的標準輸入。所有程序都使用單一標準錯誤管道。如果給定了 WORKING_DIRECTORY,則會將指定的目錄設定為子程序的目前工作目錄。如果給定了 TIMEOUT,如果子程序未在指定的秒數內完成(允許小數),則會終止子程序。如果給定了 RESULT_VARIABLE,則會將該變數設定為包含執行程序的結果。這會是來自最後一個子程序的整數傳回碼,或是描述錯誤情況的字串。如果給定了 OUTPUT_VARIABLE 或 ERROR_VARIABLE,則會將命名變數設定為標準輸出和標準錯誤管道的內容。如果為兩個管道命名相同的變數,則它們的輸出會依產生的順序合併。如果給定了 INPUT_FILE、OUTPUT_FILE 或 ERROR_FILE,則會將命名的檔案分別附加到第一個程序的標準輸入、最後一個程序的標準輸出或所有程序的標準錯誤。如果給定了 OUTPUT_QUIET 或 ERROR_QUIET,則會靜默忽略標準輸出或標準錯誤結果。如果為同一管道指定了多個 OUTPUT_* 或 ERROR_* 選項,則未指定優先順序。如果未指定任何 OUTPUT_* 或 ERROR_* 選項,則輸出會與 CMake 程序本身的對應管道共用。
execute_process 命令是 exec_program 的較新、更強大的版本,但為了相容性,保留了舊命令。
file
:檔案操作命令。file(WRITE filename "message to write"... )
file(APPEND filename "message to write"... )
file(READ filename variable [LIMIT numBytes] [OFFSET offset] [HEX])
file(STRINGS filename variable [LIMIT_COUNT num]
[LIMIT_INPUT numBytes] [LIMIT_OUTPUT numBytes]
[LENGTH_MINIMUM numBytes] [LENGTH_MAXIMUM numBytes]
[NEWLINE_CONSUME] [REGEX regex]
[NO_HEX_CONVERSION])
file(GLOB variable [RELATIVE path] [globbing expressions]...)
file(GLOB_RECURSE variable [RELATIVE path]
[FOLLOW_SYMLINKS] [globbing expressions]...)
file(REMOVE [file1 ...])
file(REMOVE_RECURSE [file1 ...])
file(MAKE_DIRECTORY [directory1 directory2 ...])
file(RELATIVE_PATH variable directory file)
file(TO_CMAKE_PATH path result)
file(TO_NATIVE_PATH path result)
file(DOWNLOAD url file [TIMEOUT timeout] [STATUS status] [LOG log])
WRITE 會將訊息寫入名為「filename」的檔案中。如果該檔案已存在,則會覆寫該檔案;如果該檔案不存在,則會建立該檔案。
APPEND 會將訊息寫入檔案中,與 WRITE 相同,只是會將訊息附加到檔案的結尾。
READ 會讀取檔案的內容,並將其儲存到變數中。它會從指定的偏移量開始,最多讀取 numBytes。如果指定了引數 HEX,則會將二進位資料轉換為十六進位表示法,並將其儲存在變數中。
STRINGS 會從檔案中剖析 ASCII 字串清單,並將其儲存在變數中。會忽略檔案中的二進位資料。會忽略歸位字元 (CR)。它也適用於 Intel Hex 和 Motorola S-record 檔案,這些檔案會在讀取時自動轉換為二進位格式。使用 NO_HEX_CONVERSION 停用此功能。
LIMIT_COUNT 設定要傳回的最大字串數量。LIMIT_INPUT 設定要從輸入檔案讀取的最大位元組數。LIMIT_OUTPUT 設定要儲存在輸出變數中的最大位元組數。LENGTH_MINIMUM 設定要傳回的字串的最小長度。會忽略較短的字串。LENGTH_MAXIMUM 設定要傳回的字串的最大長度。會將較長的字串分割成不超過最大長度的字串。NEWLINE_CONSUME 允許在字串中包含換行符,而不是終止字串。
REGEX 指定字串必須符合才能傳回的正規表示式。典型用法
file(STRINGS myfile.txt myfile)
會將清單儲存在變數「myfile」中,其中每個項目都是來自輸入檔案的行。
GLOB 會產生符合 globbing 運算式的全部檔案清單,並將其儲存到變數中。Globbing 運算式與正規表示式相似,但簡單得多。如果為運算式指定了 RELATIVE 旗標,則結果會以相對於指定路徑的路徑傳回。
Globbing 運算式的範例包括
*.cxx - match all files with extension cxx
*.vt? - match all files with extension vta,...,vtz
f[3-5].txt - match files f3.txt, f4.txt, f5.txt
GLOB_RECURSE 會產生與一般 GLOB 類似的清單,只是它會遍歷符合目錄的所有子目錄,並符合檔案。只有在給定 FOLLOW_SYMLINKS 或未將 cmake 原則 CMP0009 設定為 NEW 時,才會遍歷符號連結的子目錄。如需詳細資訊,請參閱 cmake --help-policy CMP0009。
遞迴 globbing 的範例包括
/dir/*.py - match all python files in /dir and subdirectories
MAKE_DIRECTORY 會建立指定的目錄,即使其父目錄尚不存在。
REMOVE 會移除指定的檔案,包括子目錄中的檔案。
REMOVE_RECURSE 會移除指定的檔案和目錄,包括非空目錄。
RELATIVE_PATH 會決定從目錄到指定檔案的相對路徑。
TO_CMAKE_PATH 會使用 unix / 將路徑轉換為 cmake 樣式路徑。輸入可以是單一路徑,或是像「$ENV{PATH}」這樣的系統路徑。請注意 ENV 呼叫周圍的雙引號,TO_CMAKE_PATH 只會採用一個引數。
TO_NATIVE_PATH 的運作方式與 TO_CMAKE_PATH 相同,但會將 cmake 樣式路徑轉換為 Windows 的原生路徑樣式 \ 以及 UNIX 的 /。
DOWNLOAD 會將指定的 URL 下載到指定的檔案。如果指定了 LOG var,則會將下載記錄放置在 var 中。如果指定了 STATUS var,則會將作業的狀態放置在 var 中。狀態會以長度為 2 的清單傳回。第一個元素是作業的數值傳回值,第二個元素是錯誤的字串值。數值錯誤 0 表示作業中沒有錯誤。如果指定了 TIMEOUT 時間,則作業會在時間秒後逾時,時間可以指定為浮點數。
find_file
:尋找檔案的完整路徑。find_path(<VAR> name1 [path1 path2 ...])
這是命令的簡寫簽章,在許多情況下已足夠。它與 find_path(<VAR> name1 [PATHS path1 path2 ...]) 相同
find_path(
<VAR>
name | NAMES name1 [name2 ...]
[HINTS path1 [path2 ... ENV var]]
[PATHS path1 [path2 ... ENV var]]
[PATH_SUFFIXES suffix1 [suffix2 ...]]
[DOC "cache documentation string"]
[NO_DEFAULT_PATH]
[NO_CMAKE_ENVIRONMENT_PATH]
[NO_CMAKE_PATH]
[NO_SYSTEM_ENVIRONMENT_PATH]
[NO_CMAKE_SYSTEM_PATH]
[CMAKE_FIND_ROOT_PATH_BOTH |
ONLY_CMAKE_FIND_ROOT_PATH |
NO_CMAKE_FIND_ROOT_PATH]
)
此命令用於尋找指定檔案的完整路徑。會建立一個以 <VAR> 命名的快取項目,以儲存此命令的結果。如果找到檔案的完整路徑,則會將結果儲存在變數中,並且除非清除該變數,否則不會重複搜尋。如果未找到任何內容,則結果會是 <VAR>-NOTFOUND,並且下次使用相同變數叫用 find_path 時,會再次嘗試搜尋。要搜尋的檔案完整路徑的名稱,會由 NAMES 引數後列出的名稱指定。其他搜尋位置可以在 PATHS 引數後指定。如果在 HINTS 或 PATHS 區段中找到 ENV var,則會讀取環境變數 var,並將其從系統環境變數轉換為 cmake 樣式路徑清單。例如,ENV PATH 會是一種列出系統路徑變數的方式。DOC 後的引數會用於快取中的說明字串。PATH_SUFFIXES 指定要檢查的每個搜尋路徑下的其他子目錄。
如果指定了 NO_DEFAULT_PATH,則不會將其他路徑新增至搜尋。如果未指定 NO_DEFAULT_PATH,則搜尋程序如下:
1. 搜尋 cmake 特定快取變數中指定的路徑。這些路徑旨在與命令列上的 -DVAR=value 搭配使用。如果傳遞了 NO_CMAKE_PATH,則可以略過此步驟。
<prefix>/include for each <prefix> in CMAKE_PREFIX_PATH
CMAKE_INCLUDE_PATH
CMAKE_FRAMEWORK_PATH
2. 搜尋 cmake 特定環境變數中指定的路徑。這些路徑旨在設定在使用者的 shell 設定中。如果傳遞了 NO_CMAKE_ENVIRONMENT_PATH,則可以略過此步驟。
<prefix>/include for each <prefix> in CMAKE_PREFIX_PATH
CMAKE_INCLUDE_PATH
CMAKE_FRAMEWORK_PATH
3. 搜尋 HINTS 選項指定的路徑。這些應該是由系統自我檢查計算的路徑,例如已找到的另一個項目位置提供的提示。應使用 PATHS 選項指定硬式編碼猜測。
4. 搜尋標準系統環境變數。如果 NO_SYSTEM_ENVIRONMENT_PATH 是引數,則可以略過此步驟。
PATH
INCLUDE
5. 搜尋在目前系統的平台檔案中定義的 cmake 變數。如果傳遞了 NO_CMAKE_SYSTEM_PATH,則可以略過此步驟。
<prefix>/include for each <prefix> in CMAKE_SYSTEM_PREFIX_PATH
CMAKE_SYSTEM_INCLUDE_PATH
CMAKE_SYSTEM_FRAMEWORK_PATH
6. 搜尋 PATHS 選項指定的路徑,或命令的簡寫版本中指定的路徑。這些路徑通常是硬式編碼猜測。
在 Darwin 或支援 OS X Frameworks 的系統上,cmake 變數 CMAKE_FIND_FRAMEWORK 可以設定為空白,或是下列其中一項:
"FIRST" - Try to find frameworks before standard
libraries or headers. This is the default on Darwin.
"LAST" - Try to find frameworks after standard
libraries or headers.
"ONLY" - Only try to find frameworks.
"NEVER". - Never try to find frameworks.
在 Darwin 或支援 OS X Application Bundles 的系統上,cmake 變數 CMAKE_FIND_APPBUNDLE 可以設定為空白,或是下列其中一項:
"FIRST" - Try to find application bundles before standard
programs. This is the default on Darwin.
"LAST" - Try to find application bundles after standard
programs.
"ONLY" - Only try to find application bundles.
"NEVER". - Never try to find application bundles.
CMake 變數 `CMAKE_FIND_ROOT_PATH` 指定一個或多個目錄,這些目錄會被添加到所有其他搜尋目錄的前面。這有效地將整個搜尋「重新根植」於給定的位置之下。預設為空。當進行交叉編譯時,將其指向目標環境的根目錄非常有用,CMake 也會在該目錄中進行搜尋。預設情況下,會先搜尋 `CMAKE_FIND_ROOT_PATH` 中列出的目錄,然後再搜尋非根目錄。可以通過設定 `CMAKE_FIND_ROOT_PATH_MODE_INCLUDE` 來調整預設行為。此行為可以在每次呼叫時手動覆寫。透過使用 `CMAKE_FIND_ROOT_PATH_BOTH`,搜尋順序將如上所述。如果使用 `NO_CMAKE_FIND_ROOT_PATH`,則不會使用 `CMAKE_FIND_ROOT_PATH`。如果使用 `ONLY_CMAKE_FIND_ROOT_PATH`,則僅會搜尋重新根植的目錄。
預設的搜尋順序設計為針對常見使用案例最特定到最不特定。專案可以通過多次呼叫命令並使用 `NO_*` 選項來覆寫順序。
find_path(<VAR> NAMES name PATHS paths... NO_DEFAULT_PATH)
find_path(<VAR> NAMES name)
一旦其中一個呼叫成功,結果變數將被設定並儲存在快取中,這樣就不會再次搜尋。
find_library
:尋找函式庫。find_library(<VAR> name1 [path1 path2 ...])
這是該命令的簡寫簽名,在許多情況下都足夠。它與 `find_library( name1 [PATHS path1 path2 ...])` 相同。
find_library(
<VAR>
name | NAMES name1 [name2 ...]
[HINTS path1 [path2 ... ENV var]]
[PATHS path1 [path2 ... ENV var]]
[PATH_SUFFIXES suffix1 [suffix2 ...]]
[DOC "cache documentation string"]
[NO_DEFAULT_PATH]
[NO_CMAKE_ENVIRONMENT_PATH]
[NO_CMAKE_PATH]
[NO_SYSTEM_ENVIRONMENT_PATH]
[NO_CMAKE_SYSTEM_PATH]
[CMAKE_FIND_ROOT_PATH_BOTH |
ONLY_CMAKE_FIND_ROOT_PATH |
NO_CMAKE_FIND_ROOT_PATH]
)
此命令用於尋找函式庫。會建立一個名為 `` 的快取條目,用於儲存此命令的結果。如果找到函式庫,結果會儲存在變數中,並且除非清除該變數,否則不會重複搜尋。如果沒有找到任何內容,結果將為 ``-NOTFOUND,並且下次使用相同的變數呼叫 `find_library` 時會再次嘗試搜尋。要搜尋的函式庫名稱由 `NAMES` 參數後列出的名稱指定。其他搜尋位置可以在 `PATHS` 參數後指定。如果在 `HINTS` 或 `PATHS` 區段中找到 `ENV var`,則會讀取環境變數 `var`,並將其從系統環境變數轉換為 CMake 樣式的路徑清單。例如,`ENV PATH` 將是一種列出系統路徑變數的方法。`DOC` 後面的參數將用於快取中的文件字串。`PATH_SUFFIXES` 指定在每個搜尋路徑下檢查的其他子目錄。
如果指定了 NO_DEFAULT_PATH,則不會將其他路徑新增至搜尋。如果未指定 NO_DEFAULT_PATH,則搜尋程序如下:
1. 搜尋 cmake 特定快取變數中指定的路徑。這些路徑旨在與命令列上的 -DVAR=value 搭配使用。如果傳遞了 NO_CMAKE_PATH,則可以略過此步驟。
<prefix>/lib for each <prefix> in CMAKE_PREFIX_PATH
CMAKE_LIBRARY_PATH
CMAKE_FRAMEWORK_PATH
2. 搜尋 cmake 特定環境變數中指定的路徑。這些路徑旨在設定在使用者的 shell 設定中。如果傳遞了 NO_CMAKE_ENVIRONMENT_PATH,則可以略過此步驟。
<prefix>/lib for each <prefix> in CMAKE_PREFIX_PATH
CMAKE_LIBRARY_PATH
CMAKE_FRAMEWORK_PATH
3. 搜尋 HINTS 選項指定的路徑。這些應該是由系統自我檢查計算的路徑,例如已找到的另一個項目位置提供的提示。應使用 PATHS 選項指定硬式編碼猜測。
4. 搜尋標準系統環境變數。如果 NO_SYSTEM_ENVIRONMENT_PATH 是引數,則可以略過此步驟。
PATH
LIB
5. 搜尋在目前系統的平台檔案中定義的 cmake 變數。如果傳遞了 NO_CMAKE_SYSTEM_PATH,則可以略過此步驟。
<prefix>/lib for each <prefix> in CMAKE_SYSTEM_PREFIX_PATH
CMAKE_SYSTEM_LIBRARY_PATH
CMAKE_SYSTEM_FRAMEWORK_PATH
6. 搜尋 PATHS 選項指定的路徑,或命令的簡寫版本中指定的路徑。這些路徑通常是硬式編碼猜測。
在 Darwin 或支援 OS X Frameworks 的系統上,cmake 變數 CMAKE_FIND_FRAMEWORK 可以設定為空白,或是下列其中一項:
"FIRST" - Try to find frameworks before standard
libraries or headers. This is the default on Darwin.
"LAST" - Try to find frameworks after standard
libraries or headers.
"ONLY" - Only try to find frameworks.
"NEVER". - Never try to find frameworks.
在 Darwin 或支援 OS X Application Bundles 的系統上,cmake 變數 CMAKE_FIND_APPBUNDLE 可以設定為空白,或是下列其中一項:
"FIRST" - Try to find application bundles before standard
programs. This is the default on Darwin.
"LAST" - Try to find application bundles after standard
programs.
"ONLY" - Only try to find application bundles.
"NEVER". - Never try to find application bundles.
CMake 變數 `CMAKE_FIND_ROOT_PATH` 指定一個或多個目錄,這些目錄會被添加到所有其他搜尋目錄的前面。這有效地將整個搜尋「重新根植」於給定的位置之下。預設為空。當進行交叉編譯時,將其指向目標環境的根目錄非常有用,CMake 也會在該目錄中進行搜尋。預設情況下,會先搜尋 `CMAKE_FIND_ROOT_PATH` 中列出的目錄,然後再搜尋非根目錄。可以通過設定 `CMAKE_FIND_ROOT_PATH_MODE_LIBRARY` 來調整預設行為。此行為可以在每次呼叫時手動覆寫。透過使用 `CMAKE_FIND_ROOT_PATH_BOTH`,搜尋順序將如上所述。如果使用 `NO_CMAKE_FIND_ROOT_PATH`,則不會使用 `CMAKE_FIND_ROOT_PATH`。如果使用 `ONLY_CMAKE_FIND_ROOT_PATH`,則僅會搜尋重新根植的目錄。
預設的搜尋順序設計為針對常見使用案例最特定到最不特定。專案可以通過多次呼叫命令並使用 `NO_*` 選項來覆寫順序。
find_library(<VAR> NAMES name PATHS paths... NO_DEFAULT_PATH)
find_library(<VAR> NAMES name)
一旦其中一個呼叫成功,結果變數將被設定並儲存在快取中,這樣就不會再次搜尋。
如果找到的函式庫是一個框架,則 `VAR` 將被設定為框架的完整路徑 `
find_package
:載入外部專案的設定。find_package(<package> [version] [EXACT] [QUIET]
[[REQUIRED|COMPONENTS] [components...]]
[NO_POLICY_SCOPE])
從外部專案尋找並載入設定。`
使用者程式碼通常應該使用上述簡單簽名來尋找套件。此命令文件的其餘部分指定完整的命令簽名和搜尋過程的詳細資訊。鼓勵希望提供此命令可以找到的套件的專案維護人員繼續閱讀。
該命令有兩種模式來搜尋套件:「模組」模式和「組態」模式。當使用上述簡化簽名呼叫命令時,可以使用模組模式。CMake 會在 `CMAKE_MODULE_PATH` 中搜尋一個名為 "Find
完整的組態模式命令簽名是
find_package(<package> [version] [EXACT] [QUIET]
[[REQUIRED|COMPONENTS] [components...]] [NO_MODULE]
[NO_POLICY_SCOPE]
[NAMES name1 [name2 ...]]
[CONFIGS config1 [config2 ...]]
[HINTS path1 [path2 ... ]]
[PATHS path1 [path2 ... ]]
[PATH_SUFFIXES suffix1 [suffix2 ...]]
[NO_DEFAULT_PATH]
[NO_CMAKE_ENVIRONMENT_PATH]
[NO_CMAKE_PATH]
[NO_SYSTEM_ENVIRONMENT_PATH]
[NO_CMAKE_BUILDS_PATH]
[NO_CMAKE_SYSTEM_PATH]
[CMAKE_FIND_ROOT_PATH_BOTH |
ONLY_CMAKE_FIND_ROOT_PATH |
NO_CMAKE_FIND_ROOT_PATH])
`NO_MODULE` 選項可用於明確跳過模組模式。使用簡化簽名中未指定的選項也暗示了這一點。
組態模式嘗試尋找要尋找的套件提供的組態檔。會建立一個名為 `
如果找不到套件組態檔,CMake 會產生一個描述問題的錯誤,除非指定了 `QUIET` 參數。如果指定了 `REQUIRED` 且未找到套件,則會產生嚴重錯誤,並且設定步驟會停止執行。如果 `
當給定 `[version]` 參數時,組態模式只會尋找與請求的版本聲稱相容的套件版本(格式為 major[.minor[.patch[.tweak]]])。如果給定 `EXACT` 選項,則只會找到聲稱與請求的版本完全匹配的套件版本。CMake 沒有為版本號碼的含義建立任何慣例。套件版本號碼由套件本身提供的「版本」檔案檢查。對於候選套件組態檔 "
PACKAGE_FIND_NAME = the <package> name
PACKAGE_FIND_VERSION = full requested version string
PACKAGE_FIND_VERSION_MAJOR = major version if requested, else 0
PACKAGE_FIND_VERSION_MINOR = minor version if requested, else 0
PACKAGE_FIND_VERSION_PATCH = patch version if requested, else 0
PACKAGE_FIND_VERSION_TWEAK = tweak version if requested, else 0
PACKAGE_FIND_VERSION_COUNT = number of version components, 0 to 4
版本檔案會檢查它是否滿足請求的版本,並設定這些變數
PACKAGE_VERSION = full provided version string
PACKAGE_VERSION_EXACT = true if version is exact match
PACKAGE_VERSION_COMPATIBLE = true if version is compatible
PACKAGE_VERSION_UNSUITABLE = true if unsuitable as any version
這些變數由 `find_package` 命令檢查,以確定組態檔是否提供可接受的版本。它們在 `find_package` 呼叫返回後不可用。如果版本可接受,則會設定以下變數
<package>_VERSION = full provided version string
<package>_VERSION_MAJOR = major version if provided, else 0
<package>_VERSION_MINOR = minor version if provided, else 0
<package>_VERSION_PATCH = patch version if provided, else 0
<package>_VERSION_TWEAK = tweak version if provided, else 0
<package>_VERSION_COUNT = number of version components, 0 to 4
並載入相應的套件組態檔。當有多個套件組態檔的版本檔案聲稱與請求的版本相容時,未指定選擇哪一個。不會嘗試選擇最高或最接近的版本號碼。
組態模式提供了一個詳細的介面和搜尋程序。大部分介面是為了完整性而提供的,並供模組模式載入的 find-module 在內部使用。大多數使用者程式碼應該只簡單地呼叫
find_package(<package> [major[.minor]] [EXACT] [REQUIRED|QUIET])
為了尋找套件。鼓勵提供 CMake 套件組態檔的套件維護人員命名並安裝它們,以便下面的流程在不需要使用其他選項的情況下找到它們。
CMake 會為套件建構一組可能的安裝前置詞。在每個前置詞下,會搜尋多個目錄以尋找組態檔。下表顯示搜尋的目錄。每個條目都適用於遵循 Windows (W)、UNIX (U) 或 Apple (A) 慣例的安裝樹。
<prefix>/ (W)
<prefix>/(cmake|CMake)/ (W)
<prefix>/<name>*/ (W)
<prefix>/<name>*/(cmake|CMake)/ (W)
<prefix>/(share|lib)/cmake/<name>*/ (U)
<prefix>/(share|lib)/<name>*/ (U)
<prefix>/(share|lib)/<name>*/(cmake|CMake)/ (U)
在支援 OS X 框架和應用程式套件的系統上,會搜尋以下目錄以尋找包含組態檔的框架或套件
<prefix>/<name>.framework/Resources/ (A)
<prefix>/<name>.framework/Resources/CMake/ (A)
<prefix>/<name>.framework/Versions/*/Resources/ (A)
<prefix>/<name>.framework/Versions/*/Resources/CMake/ (A)
<prefix>/<name>.app/Contents/Resources/ (A)
<prefix>/<name>.app/Contents/Resources/CMake/ (A)
在所有情況下,`
這組目錄旨在與在其安裝樹中提供組態檔的專案協同工作。上面標記為 (W) 的目錄適用於 Windows 上的安裝,其中前置詞可能指向應用程式安裝目錄的頂部。標記為 (U) 的目錄適用於 UNIX 平台上的安裝,其中前置詞由多個套件共享。這只是一種慣例,因此仍然會在所有平台上搜尋所有 (W) 和 (U) 目錄。標記為 (A) 的目錄適用於 Apple 平台上的安裝。cmake 變數 `CMAKE_FIND_FRAMEWORK` 和 `CMAKE_FIND_APPBUNDLE` 會決定優先順序,如下所示。
使用以下步驟建構一組安裝前置詞。如果指定了 `NO_DEFAULT_PATH`,則會啟用所有 `NO_*` 選項。
1. 搜尋 cmake 特定快取變數中指定的路徑。這些路徑旨在與命令列上的 -DVAR=value 搭配使用。如果傳遞了 NO_CMAKE_PATH,則可以略過此步驟。
CMAKE_PREFIX_PATH
CMAKE_FRAMEWORK_PATH
CMAKE_APPBUNDLE_PATH
2. 搜尋 cmake 特定環境變數中指定的路徑。這些路徑旨在設定在使用者的 shell 設定中。如果傳遞了 NO_CMAKE_ENVIRONMENT_PATH,則可以略過此步驟。
CMAKE_PREFIX_PATH
CMAKE_FRAMEWORK_PATH
CMAKE_APPBUNDLE_PATH
3. 由 `HINTS` 選項指定的搜尋路徑。這些應該是由系統自省計算的路徑,例如由已找到的另一個項目的位置提供的提示。硬編碼的猜測應該使用 `PATHS` 選項指定。
4. 搜尋標準系統環境變數。如果傳遞 `NO_SYSTEM_ENVIRONMENT_PATH`,則可以跳過此步驟。結尾為 "/bin" 或 "/sbin" 的路徑條目會自動轉換為其父目錄。
PATH
5. 搜尋最近在 CMake GUI 中設定的專案建置樹。如果傳遞 `NO_CMAKE_BUILDS_PATH`,則可以跳過此步驟。它適用於使用者在一個接一個地建置多個相依專案的情況。
6. 搜尋在目前系統的平台檔案中定義的 cmake 變數。如果傳遞 `NO_CMAKE_SYSTEM_PATH`,則可以跳過此步驟。
CMAKE_SYSTEM_PREFIX_PATH
CMAKE_SYSTEM_FRAMEWORK_PATH
CMAKE_SYSTEM_APPBUNDLE_PATH
7. 由 `PATHS` 選項指定的搜尋路徑。這些通常是硬編碼的猜測。
在 Darwin 或支援 OS X Frameworks 的系統上,cmake 變數 CMAKE_FIND_FRAMEWORK 可以設定為空白,或是下列其中一項:
"FIRST" - Try to find frameworks before standard
libraries or headers. This is the default on Darwin.
"LAST" - Try to find frameworks after standard
libraries or headers.
"ONLY" - Only try to find frameworks.
"NEVER". - Never try to find frameworks.
在 Darwin 或支援 OS X Application Bundles 的系統上,cmake 變數 CMAKE_FIND_APPBUNDLE 可以設定為空白,或是下列其中一項:
"FIRST" - Try to find application bundles before standard
programs. This is the default on Darwin.
"LAST" - Try to find application bundles after standard
programs.
"ONLY" - Only try to find application bundles.
"NEVER". - Never try to find application bundles.
CMake 變數 `CMAKE_FIND_ROOT_PATH` 指定一個或多個目錄,這些目錄會被添加到所有其他搜尋目錄的前面。這有效地將整個搜尋「重新根植」於給定的位置之下。預設為空。當進行交叉編譯時,將其指向目標環境的根目錄非常有用,CMake 也會在該目錄中進行搜尋。預設情況下,會先搜尋 `CMAKE_FIND_ROOT_PATH` 中列出的目錄,然後再搜尋非根目錄。可以通過設定 `CMAKE_FIND_ROOT_PATH_MODE_PACKAGE` 來調整預設行為。此行為可以在每次呼叫時手動覆寫。透過使用 `CMAKE_FIND_ROOT_PATH_BOTH`,搜尋順序將如上所述。如果使用 `NO_CMAKE_FIND_ROOT_PATH`,則不會使用 `CMAKE_FIND_ROOT_PATH`。如果使用 `ONLY_CMAKE_FIND_ROOT_PATH`,則僅會搜尋重新根植的目錄。
預設的搜尋順序設計為針對常見使用案例最特定到最不特定。專案可以通過多次呼叫命令並使用 `NO_*` 選項來覆寫順序。
find_package(<package> PATHS paths... NO_DEFAULT_PATH)
find_package(<package>)
一旦其中一個呼叫成功,結果變數將被設定並儲存在快取中,這樣就不會再次搜尋。
請參閱 `cmake_policy()` 命令文件以瞭解有關 `NO_POLICY_SCOPE` 選項的討論。
find_path
:尋找包含檔案的目錄。find_path(<VAR> name1 [path1 path2 ...])
這是命令的簡寫簽章,在許多情況下已足夠。它與 find_path(<VAR> name1 [PATHS path1 path2 ...]) 相同
find_path(
<VAR>
name | NAMES name1 [name2 ...]
[HINTS path1 [path2 ... ENV var]]
[PATHS path1 [path2 ... ENV var]]
[PATH_SUFFIXES suffix1 [suffix2 ...]]
[DOC "cache documentation string"]
[NO_DEFAULT_PATH]
[NO_CMAKE_ENVIRONMENT_PATH]
[NO_CMAKE_PATH]
[NO_SYSTEM_ENVIRONMENT_PATH]
[NO_CMAKE_SYSTEM_PATH]
[CMAKE_FIND_ROOT_PATH_BOTH |
ONLY_CMAKE_FIND_ROOT_PATH |
NO_CMAKE_FIND_ROOT_PATH]
)
此命令用於尋找包含指定檔案名稱的目錄。會建立一個以 <VAR> 命名的快取條目,以儲存此命令的結果。如果在目錄中找到該檔案,結果會儲存在變數中,並且除非清除該變數,否則不會重複搜尋。如果沒有找到任何檔案,結果將會是 <VAR>-NOTFOUND,並且下次使用相同的變數呼叫 find_path 時會再次嘗試搜尋。要搜尋的目錄中的檔案名稱由 NAMES 參數後面列出的名稱指定。其他搜尋位置可以在 PATHS 參數後面指定。如果在 HINTS 或 PATHS 區段中找到 ENV 變數,則會讀取該環境變數 var,並將其從系統環境變數轉換為 cmake 風格的路徑清單。例如,ENV PATH 可以用來列出系統路徑變數。DOC 後面的參數將用於快取中的文件字串。PATH_SUFFIXES 指定要檢查的每個搜尋路徑下的其他子目錄。
如果指定了 NO_DEFAULT_PATH,則不會將其他路徑新增至搜尋。如果未指定 NO_DEFAULT_PATH,則搜尋程序如下:
1. 搜尋 cmake 特定快取變數中指定的路徑。這些路徑旨在與命令列上的 -DVAR=value 搭配使用。如果傳遞了 NO_CMAKE_PATH,則可以略過此步驟。
<prefix>/include for each <prefix> in CMAKE_PREFIX_PATH
CMAKE_INCLUDE_PATH
CMAKE_FRAMEWORK_PATH
2. 搜尋 cmake 特定環境變數中指定的路徑。這些路徑旨在設定在使用者的 shell 設定中。如果傳遞了 NO_CMAKE_ENVIRONMENT_PATH,則可以略過此步驟。
<prefix>/include for each <prefix> in CMAKE_PREFIX_PATH
CMAKE_INCLUDE_PATH
CMAKE_FRAMEWORK_PATH
3. 搜尋 HINTS 選項指定的路徑。這些應該是由系統自我檢查計算的路徑,例如已找到的另一個項目位置提供的提示。應使用 PATHS 選項指定硬式編碼猜測。
4. 搜尋標準系統環境變數。如果 NO_SYSTEM_ENVIRONMENT_PATH 是引數,則可以略過此步驟。
PATH
INCLUDE
5. 搜尋在目前系統的平台檔案中定義的 cmake 變數。如果傳遞了 NO_CMAKE_SYSTEM_PATH,則可以略過此步驟。
<prefix>/include for each <prefix> in CMAKE_SYSTEM_PREFIX_PATH
CMAKE_SYSTEM_INCLUDE_PATH
CMAKE_SYSTEM_FRAMEWORK_PATH
6. 搜尋 PATHS 選項指定的路徑,或命令的簡寫版本中指定的路徑。這些路徑通常是硬式編碼猜測。
在 Darwin 或支援 OS X Frameworks 的系統上,cmake 變數 CMAKE_FIND_FRAMEWORK 可以設定為空白,或是下列其中一項:
"FIRST" - Try to find frameworks before standard
libraries or headers. This is the default on Darwin.
"LAST" - Try to find frameworks after standard
libraries or headers.
"ONLY" - Only try to find frameworks.
"NEVER". - Never try to find frameworks.
在 Darwin 或支援 OS X Application Bundles 的系統上,cmake 變數 CMAKE_FIND_APPBUNDLE 可以設定為空白,或是下列其中一項:
"FIRST" - Try to find application bundles before standard
programs. This is the default on Darwin.
"LAST" - Try to find application bundles after standard
programs.
"ONLY" - Only try to find application bundles.
"NEVER". - Never try to find application bundles.
CMake 變數 `CMAKE_FIND_ROOT_PATH` 指定一個或多個目錄,這些目錄會被添加到所有其他搜尋目錄的前面。這有效地將整個搜尋「重新根植」於給定的位置之下。預設為空。當進行交叉編譯時,將其指向目標環境的根目錄非常有用,CMake 也會在該目錄中進行搜尋。預設情況下,會先搜尋 `CMAKE_FIND_ROOT_PATH` 中列出的目錄,然後再搜尋非根目錄。可以通過設定 `CMAKE_FIND_ROOT_PATH_MODE_INCLUDE` 來調整預設行為。此行為可以在每次呼叫時手動覆寫。透過使用 `CMAKE_FIND_ROOT_PATH_BOTH`,搜尋順序將如上所述。如果使用 `NO_CMAKE_FIND_ROOT_PATH`,則不會使用 `CMAKE_FIND_ROOT_PATH`。如果使用 `ONLY_CMAKE_FIND_ROOT_PATH`,則僅會搜尋重新根植的目錄。
預設的搜尋順序設計為針對常見使用案例最特定到最不特定。專案可以通過多次呼叫命令並使用 `NO_*` 選項來覆寫順序。
find_path(<VAR> NAMES name PATHS paths... NO_DEFAULT_PATH)
find_path(<VAR> NAMES name)
一旦其中一個呼叫成功,結果變數將被設定並儲存在快取中,這樣就不會再次搜尋。
在搜尋框架時,如果檔案指定為 A/b.h,則框架搜尋將會尋找 A.framework/Headers/b.h。如果找到該檔案,路徑將會設定為框架的路徑。CMake 會將其轉換為正確的 -F 選項以包含該檔案。
find_program
: 尋找可執行程式。find_program(<VAR> name1 [path1 path2 ...])
這是命令的簡寫簽名,在許多情況下都足夠使用。它與 find_program(<VAR> name1 [PATHS path1 path2 ...]) 相同。
find_program(
<VAR>
name | NAMES name1 [name2 ...]
[HINTS path1 [path2 ... ENV var]]
[PATHS path1 [path2 ... ENV var]]
[PATH_SUFFIXES suffix1 [suffix2 ...]]
[DOC "cache documentation string"]
[NO_DEFAULT_PATH]
[NO_CMAKE_ENVIRONMENT_PATH]
[NO_CMAKE_PATH]
[NO_SYSTEM_ENVIRONMENT_PATH]
[NO_CMAKE_SYSTEM_PATH]
[CMAKE_FIND_ROOT_PATH_BOTH |
ONLY_CMAKE_FIND_ROOT_PATH |
NO_CMAKE_FIND_ROOT_PATH]
)
此命令用於尋找程式。會建立一個以 <VAR> 命名的快取條目,以儲存此命令的結果。如果找到該程式,結果會儲存在變數中,並且除非清除該變數,否則不會重複搜尋。如果沒有找到任何程式,結果將會是 <VAR>-NOTFOUND,並且下次使用相同的變數呼叫 find_program 時會再次嘗試搜尋。要搜尋的程式名稱由 NAMES 參數後面列出的名稱指定。其他搜尋位置可以在 PATHS 參數後面指定。如果在 HINTS 或 PATHS 區段中找到 ENV 變數,則會讀取該環境變數 var,並將其從系統環境變數轉換為 cmake 風格的路徑清單。例如,ENV PATH 可以用來列出系統路徑變數。DOC 後面的參數將用於快取中的文件字串。PATH_SUFFIXES 指定要檢查的每個搜尋路徑下的其他子目錄。
如果指定了 NO_DEFAULT_PATH,則不會將其他路徑新增至搜尋。如果未指定 NO_DEFAULT_PATH,則搜尋程序如下:
1. 搜尋 cmake 特定快取變數中指定的路徑。這些路徑旨在與命令列上的 -DVAR=value 搭配使用。如果傳遞了 NO_CMAKE_PATH,則可以略過此步驟。
<prefix>/[s]bin for each <prefix> in CMAKE_PREFIX_PATH
CMAKE_PROGRAM_PATH
CMAKE_APPBUNDLE_PATH
2. 搜尋 cmake 特定環境變數中指定的路徑。這些路徑旨在設定在使用者的 shell 設定中。如果傳遞了 NO_CMAKE_ENVIRONMENT_PATH,則可以略過此步驟。
<prefix>/[s]bin for each <prefix> in CMAKE_PREFIX_PATH
CMAKE_PROGRAM_PATH
CMAKE_APPBUNDLE_PATH
3. 搜尋 HINTS 選項指定的路徑。這些應該是由系統自我檢查計算的路徑,例如已找到的另一個項目位置提供的提示。應使用 PATHS 選項指定硬式編碼猜測。
4. 搜尋標準系統環境變數。如果 NO_SYSTEM_ENVIRONMENT_PATH 是引數,則可以略過此步驟。
PATH
5. 搜尋在目前系統的平台檔案中定義的 cmake 變數。如果傳遞了 NO_CMAKE_SYSTEM_PATH,則可以略過此步驟。
<prefix>/[s]bin for each <prefix> in CMAKE_SYSTEM_PREFIX_PATH
CMAKE_SYSTEM_PROGRAM_PATH
CMAKE_SYSTEM_APPBUNDLE_PATH
6. 搜尋 PATHS 選項指定的路徑,或命令的簡寫版本中指定的路徑。這些路徑通常是硬式編碼猜測。
在 Darwin 或支援 OS X Frameworks 的系統上,cmake 變數 CMAKE_FIND_FRAMEWORK 可以設定為空白,或是下列其中一項:
"FIRST" - Try to find frameworks before standard
libraries or headers. This is the default on Darwin.
"LAST" - Try to find frameworks after standard
libraries or headers.
"ONLY" - Only try to find frameworks.
"NEVER". - Never try to find frameworks.
在 Darwin 或支援 OS X Application Bundles 的系統上,cmake 變數 CMAKE_FIND_APPBUNDLE 可以設定為空白,或是下列其中一項:
"FIRST" - Try to find application bundles before standard
programs. This is the default on Darwin.
"LAST" - Try to find application bundles after standard
programs.
"ONLY" - Only try to find application bundles.
"NEVER". - Never try to find application bundles.
CMake 變數 CMAKE_FIND_ROOT_PATH 指定一個或多個要附加到所有其他搜尋目錄的路徑。這實際上將整個搜尋「重新紮根」到給定的位置下。預設情況下,它是空的。當交叉編譯以指向目標環境的根目錄時,它特別有用,並且 CMake 也會在該處搜尋。預設情況下,首先會搜尋 CMAKE_FIND_ROOT_PATH 中列出的目錄,然後再搜尋非紮根的目錄。可以透過設定 CMAKE_FIND_ROOT_PATH_MODE_PROGRAM 來調整預設行為。此行為可以在每次呼叫時手動覆寫。透過使用 CMAKE_FIND_ROOT_PATH_BOTH,搜尋順序將如上所述。如果使用 NO_CMAKE_FIND_ROOT_PATH,則不會使用 CMAKE_FIND_ROOT_PATH。如果使用 ONLY_CMAKE_FIND_ROOT_PATH,則只會搜尋重新紮根的目錄。
預設的搜尋順序設計為針對常見使用案例最特定到最不特定。專案可以通過多次呼叫命令並使用 `NO_*` 選項來覆寫順序。
find_program(<VAR> NAMES name PATHS paths... NO_DEFAULT_PATH)
find_program(<VAR> NAMES name)
一旦其中一個呼叫成功,結果變數將被設定並儲存在快取中,這樣就不會再次搜尋。
foreach
: 對清單中的每個值評估一組命令。foreach(loop_var arg1 arg2 ...)
COMMAND1(ARGS ...)
COMMAND2(ARGS ...)
...
endforeach(loop_var)
foreach(loop_var RANGE total)
foreach(loop_var RANGE start stop [step])
foreach 和匹配的 endforeach 之間的所有命令都會被記錄下來,而不會被調用。一旦評估 endforeach,就會針對原始 foreach 命令中列出的每個參數調用記錄的命令清單一次。在每次迴圈迭代之前,「${loop_var}」將被設定為一個變數,其中包含清單中的目前值。
Foreach 也可以在產生的數字範圍上迭代。這種迭代有三種類型
* 當指定單個數字時,範圍將包含從 0 到「總數」的元素。
* 當指定兩個數字時,範圍將包含從第一個數字到第二個數字的元素。
* 第三個可選數字是從第一個數字迭代到第二個數字時使用的增量。
function
: 開始記錄一個函數,以便稍後作為命令調用。function(<name> [arg1 [arg2 [arg3 ...]]])
COMMAND1(ARGS ...)
COMMAND2(ARGS ...)
...
endfunction(<name>)
定義一個名為 <name> 的函數,該函數接受名為 arg1 arg2 arg3 (...) 的參數。在 function 之後,但在匹配的 endfunction 之前的命令不會被調用,直到該函數被調用。當函數被調用時,函數中記錄的命令首先會被修改,將形式參數 (${arg1}) 替換為傳遞的參數,然後像普通命令一樣被調用。除了引用形式參數之外,您還可以引用變數 ARGC,該變數將被設定為傳遞給函數的參數數量,以及 ARGV0 ARGV1 ARGV2 ...,這些變數將包含傳遞參數的實際值。這有助於建立具有可選參數的函數。此外,ARGV 包含傳遞給函數的所有參數的清單,而 ARGN 包含傳遞最後預期參數的參數清單。
請參閱 cmake_policy() 命令文件,以了解函數內部的原則行為。
get_cmake_property
: 取得 CMake 實例的屬性。get_cmake_property(VAR property)
從 CMake 實例取得屬性。該屬性的值儲存在變數 VAR 中。如果找不到該屬性,CMake 將報告錯誤。一些支援的屬性包括:VARIABLES、CACHE_VARIABLES、COMMANDS、MACROS 和 COMPONENTS。
get_directory_property
: 取得目錄的屬性。get_directory_property(VAR [DIRECTORY dir] property)
從目錄取得屬性。該屬性的值儲存在變數 VAR 中。如果找不到該屬性,CMake 將報告錯誤。這些屬性包括:VARIABLES、CACHE_VARIABLES、COMMANDS、MACROS、INCLUDE_DIRECTORIES、LINK_DIRECTORIES、DEFINITIONS、INCLUDE_REGULAR_EXPRESSION、LISTFILE_STACK、PARENT_DIRECTORY 和 DEFINITION varname。如果提供了 DIRECTORY 參數,則會檢索所提供目錄的屬性,而不是目前的目錄。您只能在 CMake 遍歷目錄期間或之後取得目錄的屬性。
get_filename_component
: 取得完整檔案名稱的特定元件。get_filename_component(VarName FileName
PATH|ABSOLUTE|NAME|EXT|NAME_WE
[CACHE])
將 VarName 設定為 FileName 的路徑 (PATH)、檔案名稱 (NAME)、檔案副檔名 (EXT)、沒有副檔名的檔案名稱 (NAME_WE),或沒有符號連結的完整絕對 (ABSOLUTE) 檔案名稱。請注意,路徑會轉換為 Unix 斜線格式,且沒有尾隨斜線。一律會考慮最長的檔案副檔名。如果指定了可選的 CACHE 參數,則結果變數會新增至快取。
get_filename_component(VarName FileName
PROGRAM [PROGRAM_ARGS ArgVar]
[CACHE])
FileName 中的程式將會在系統搜尋路徑中找到,或保留為完整路徑。如果 PROGRAM_ARGS 與 PROGRAM 一起存在,則 FileName 字串中存在的任何命令列參數都會從程式名稱中分離出來,並儲存在 ArgVar 中。這用於在命令列字串中將程式名稱與其參數分離。
get_property
: 取得屬性。get_property(<variable>
<GLOBAL |
DIRECTORY [dir] |
TARGET <target> |
SOURCE <source> |
TEST <test> |
VARIABLE>
PROPERTY <name>
[SET | DEFINED | BRIEF_DOCS | FULL_DOCS])
從範圍中的一個物件取得一個屬性。第一個參數指定要儲存結果的變數。第二個參數決定要從哪個範圍取得屬性。它必須是下列其中之一
GLOBAL 範圍是唯一的,不接受名稱。
DIRECTORY 範圍預設為目前的目錄,但可以使用完整或相對路徑命名另一個目錄(已經被 CMake 處理過)。
TARGET 範圍必須命名一個現有的目標。
SOURCE 範圍必須命名一個原始碼檔案。
TEST 範圍必須命名一個現有的測試。
VARIABLE 範圍是唯一的,不接受名稱。
必要的 PROPERTY 選項緊接著是要取得的屬性名稱。如果未設定屬性,則會傳回空值。如果給定 SET 選項,則變數會設定為布林值,指示屬性是否已設定。如果給定 DEFINED 選項,則變數會設定為布林值,指示屬性是否已定義,例如使用 define_property。如果給定 BRIEF_DOCS 或 FULL_DOCS,則變數會設定為包含所請求屬性文件的字串。如果請求未定義屬性的文件,則會傳回 NOTFOUND。
if
: 有條件地執行一組命令。if(expression)
# then section.
COMMAND1(ARGS ...)
COMMAND2(ARGS ...)
...
elseif(expression2)
# elseif section.
COMMAND1(ARGS ...)
COMMAND2(ARGS ...)
...
else(expression)
# else section.
COMMAND1(ARGS ...)
COMMAND2(ARGS ...)
...
endif(expression)
評估給定的運算式。如果結果為 true,則會調用 THEN 區段中的命令。否則,會調用 else 區段中的命令。elseif 和 else 區段是可選的。您可以有多個 elseif 子句。請注意,相同的運算式必須給定給 if 和 endif。可以使用長運算式,優先順序是 EXISTS、COMMAND 和 DEFINED 運算子會先評估。然後會評估任何 EQUAL、LESS、GREATER、STRLESS、STRGREATER、STREQUAL、MATCHES。然後會評估 NOT 運算子,最後會評估 AND、OR 運算子。可能的運算式有
if(variable)
如果變數的值不為空、0、N、NO、OFF、FALSE、NOTFOUND 或 <variable>-NOTFOUND,則為 true。
if(NOT variable)
如果變數的值為空、0、N、NO、OFF、FALSE、NOTFOUND 或 <variable>-NOTFOUND,則為 true。
if(variable1 AND variable2)
如果兩個變數都被個別視為 true,則為 true。
if(variable1 OR variable2)
如果任一變數都被個別視為 true,則為 true。
if(COMMAND command-name)
如果給定的名稱是可以調用的命令、巨集或函數,則為 true。
if(POLICY policy-id)
如果給定的名稱是現有的原則(形式為 CMP<NNNN>),則為 true。
if(TARGET target-name)
如果給定的名稱是現有的目標、已建置或已匯入的目標,則為 true。
if(EXISTS file-name)
if(EXISTS directory-name)
如果指定的檔案或目錄存在,則為 true。行為僅適用於完整路徑。
if(file1 IS_NEWER_THAN file2)
如果 file1 比 file2 新,或者如果兩個檔案之一不存在,則為 true。行為僅適用於完整路徑。
if(IS_DIRECTORY directory-name)
如果給定的名稱是目錄,則為 true。行為僅適用於完整路徑。
if(IS_ABSOLUTE path)
如果給定的路徑是絕對路徑,則為 true。
if(variable MATCHES regex)
if(string MATCHES regex)
如果給定的字串或變數的值與給定的正規運算式匹配,則為 true。
if(variable LESS number)
if(string LESS number)
if(variable GREATER number)
if(string GREATER number)
if(variable EQUAL number)
if(string EQUAL number)
如果給定的字串或變數的值是有效的數字,且不等式或等式為 true,則為 true。
if(variable STRLESS string)
if(string STRLESS string)
if(variable STRGREATER string)
if(string STRGREATER string)
if(variable STREQUAL string)
if(string STREQUAL string)
如果給定的字串或變數的值在字典順序上小於(或大於或等於)右側的字串,則為 true。
if(version1 VERSION_LESS version2)
if(version1 VERSION_EQUAL version2)
if(version1 VERSION_GREATER version2)
元件式整數版本號碼比較(版本格式為主要版本[.次要版本[.修補程式[.微調]])。
if(DEFINED variable)
如果已定義給定的變數,則為 true。變數是 true 還是 false 無關緊要,重要的是是否已設定。
include
: 從給定的檔案讀取 CMake 清單檔案程式碼。include(<file|module> [OPTIONAL] [RESULT_VARIABLE <VAR>]
[NO_POLICY_SCOPE])
從給定的檔案讀取 CMake 清單檔案程式碼。檔案中的命令會立即處理,就像它們是寫在 include 命令的位置一樣。如果存在 OPTIONAL,則如果檔案不存在,則不會引發錯誤。如果給定了 RESULT_VARIABLE,則變數會設定為已包含的完整檔案名稱,如果失敗則設定為 NOTFOUND。
如果指定的是模組而不是檔案,則會在 CMAKE_MODULE_PATH 中搜尋名稱為 <modulename>.cmake 的檔案。
請參閱 `cmake_policy()` 命令文件以瞭解有關 `NO_POLICY_SCOPE` 選項的討論。
list
: 清單操作。list(LENGTH <list> <output variable>)
list(GET <list> <element index> [<element index> ...] <output variable>)
list(APPEND <list> <element> [<element> ...])
list(FIND <list> <value> <output variable>)
list(INSERT <list> <element_index> <element> [<element> ...])
list(REMOVE_ITEM <list> <value> [<value> ...])
list(REMOVE_AT <list> <index> [<index> ...])
list(REMOVE_DUPLICATES <list>)
list(REVERSE <list>)
list(SORT <list>)
LENGTH 會回傳給定列表的長度。
GET 會回傳列表中,由索引值所指定的元素列表。
APPEND 會將元素附加到列表的尾端。
FIND 會回傳列表中指定元素的索引值,若找不到則回傳 -1。
INSERT 會將元素插入到列表中指定的位置。
REMOVE_AT 和 REMOVE_ITEM 會從列表中移除項目。 兩者的差異在於 REMOVE_ITEM 會移除給定的項目,而 REMOVE_AT 則會移除給定索引位置的項目。
REMOVE_DUPLICATES 會移除列表中重複的項目。
REVERSE 會將列表內容原地反轉。
SORT 會將列表原地依字母順序排序。
注意:在 CMake 中,列表是以分號 (;) 分隔的字串群組。可以使用 `set` 命令來建立列表。例如,`set(var a b c d e)` 會建立一個包含 `a;b;c;d;e` 的列表,而 `set(var "a b c d e")` 則會建立一個字串或一個僅包含單一項目的列表。
當指定索引值時,若 <element index> 大於等於 0,則索引從列表開頭計算,其中 0 代表第一個列表元素。若 <element index> 小於等於 -1,則索引從列表末尾計算,其中 -1 代表最後一個列表元素。使用負索引時請小心:它們不是從 0 開始計數的。 -0 等同於 0,也就是第一個列表元素。
macro
:開始錄製巨集,以便稍後作為命令調用。macro(<name> [arg1 [arg2 [arg3 ...]]])
COMMAND1(ARGS ...)
COMMAND2(ARGS ...)
...
endmacro(<name>)
定義一個名為 <name> 的巨集,它接受名為 arg1 arg2 arg3 (...) 的參數。在 `macro` 之後、`endmacro` 之前的命令不會被調用,直到巨集被調用時才會執行。當巨集被調用時,巨集中記錄的命令會先被修改,將形式參數 (${arg1}) 替換為傳入的實際參數,然後才像一般命令一樣被調用。除了引用形式參數之外,您還可以引用值 ${ARGC},它將被設定為傳入函數的參數個數;以及 ${ARGV0}、${ARGV1}、${ARGV2} ...,它們將包含傳入的實際參數值。這有助於建立具有可選參數的巨集。此外,${ARGV} 會保存傳遞給巨集的所有參數列表,而 ${ARGN} 則會保存傳遞給巨集的超出預期參數的剩餘參數列表。請注意,巨集的參數和諸如 ARGN 等值並不是 CMake 通常意義上的變數。它們就像 C 預處理器對巨集所做的那樣,是字串替換。如果您想要真正的 CMake 變數,應該使用 `function` 命令。
有關巨集中策略的行為,請參閱 `cmake_policy()` 命令的文件。
make_directory
:已棄用。請改用 `file(MAKE_DIRECTORY)` 命令。make_directory(directory)
建立指定的目錄。應給予完整路徑。任何不存在的父目錄也會被建立。請小心使用。
mark_as_advanced
:將 CMake 快取變數標記為進階。mark_as_advanced([CLEAR|FORCE] VAR VAR2 VAR...)
將指定的快取變數標記為進階。進階變數不會顯示在任何 CMake GUI 中,除非開啟了顯示進階選項。如果第一個參數是 `CLEAR`,則進階變數會被改回非進階。如果第一個參數是 `FORCE`,則該變數會被強制設為進階。如果既未指定 `FORCE` 也未指定 `CLEAR`,則新的值將會被標記為進階,但如果該變數已經有進階/非進階狀態,則不會被更改。
在腳本模式下,此命令不會執行任何操作。
math
:數學運算式。math(EXPR <output variable> <math expression>)
`EXPR` 會計算數學運算式,並將結果回傳至輸出變數。例如,數學運算式可以是 '5 * ( 10 + 13 )'。支援的運算符包括 + - * / % | & ^ ~ << >> * / %。它們的含義與 C 程式碼中相同。
message
:向使用者顯示訊息。message([SEND_ERROR | STATUS | FATAL_ERROR]
"message to display" ...)
預設情況下,訊息會顯示在彈出視窗 (CMakeSetup)、CMake 的標準輸出,或 ccmake 的錯誤區段中。如果第一個參數是 `SEND_ERROR`,則會引發錯誤,並跳過產生階段。如果第一個參數是 `FATAL_ERROR`,則所有處理都會停止。如果第一個參數是 `STATUS`,則訊息會顯示在 GUI 的進度列中,或是在命令列 CMake 中以 `--` 開頭。
option
:提供使用者可以選擇開啟或關閉的選項。option(<option_variable> "help string describing option"
[initial value])
提供一個選項供使用者選擇開啟或關閉。如果未提供初始值,則會使用 `OFF`。
remove
:已棄用。請改用 `list(REMOVE_ITEM)` 命令。remove(VAR VALUE VALUE ...)
從變數 `VAR` 中移除 `VALUE`。這通常用於從向量(例如,以分號分隔的列表)中移除項目。`VALUE` 會被展開。
return
:從檔案、目錄或函式返回。return()
從檔案、目錄或函式返回。當在包含的檔案中(透過 `include()` 或 `find_package()`)遇到此命令時,會導致目前檔案的處理停止,並將控制權返回給包含該檔案的檔案。如果在未被其他檔案包含的檔案中遇到此命令,例如 CMakeLists.txt,則控制權會返回至父目錄(如果有的話)。如果在函式中調用 `return`,則控制權會返回至該函式的呼叫者。請注意,巨集不是函式,並且不會像函式一樣處理 `return`。
separate_arguments
:將以空格分隔的參數分割為以分號分隔的列表。separate_arguments(VARIABLE)
將 `VARIABLE` 的值轉換為以分號分隔的列表。所有空格都會被替換為 ';'。這有助於產生命令列。
set
:將 CMake 變數設定為給定的值。set(<variable> <value> [[CACHE <type> <docstring> [FORCE]] | PARENT_SCOPE])
在 CMake 中,將 <variable> 設定為值 <value>。在 <variable> 被設定為該值之前,<value> 會被展開。如果存在 `CACHE`,則 <variable> 會被放入快取中。此時需要 <type> 和 <docstring>。CMake GUI 會使用 <type> 來選擇使用者設定值時使用的控制項。<type> 的值可以是下列之一:
FILEPATH = File chooser dialog.
PATH = Directory chooser dialog.
STRING = Arbitrary string.
BOOL = Boolean ON/OFF checkbox.
INTERNAL = No GUI entry (used for persistent variables).
如果 <type> 為 `INTERNAL`,則 <value> 會始終寫入快取中,覆蓋快取中已存在的任何值。如果不是快取變數,則會始終寫入目前的 makefile。`FORCE` 選項會覆寫快取值,移除使用者所做的任何變更。
如果存在 `PARENT_SCOPE`,則變數會在目前範圍的上一層範圍中設定。每個新的目錄或函式都會建立一個新的範圍。此命令會將變數的值設定到父目錄或呼叫函式中(無論適用於目前情況的是哪一個)。如果未指定 `VALUE`,則變數會從父範圍中移除。
set(<variable> <value1> ... <valueN>)
在此情況下,<variable> 會被設定為以分號分隔的值列表。
<variable> 可以是環境變數,例如:
set( ENV{PATH} /home/martink )
在這種情況下,環境變數將會被設定。
set_directory_properties
:設定目錄的屬性。set_directory_properties(PROPERTIES prop1 value1 prop2 value2)
設定目前目錄和子目錄的屬性。如果找不到該屬性,CMake 會回報錯誤。這些屬性包括:INCLUDE_DIRECTORIES、LINK_DIRECTORIES、INCLUDE_REGULAR_EXPRESSION 和 ADDITIONAL_MAKE_CLEAN_FILES。
`ADDITIONAL_MAKE_CLEAN_FILES` 是一個在 "make clean" 階段中會被清除的檔案列表。
set_property
:在給定範圍內設定具名屬性。set_property(<GLOBAL |
DIRECTORY [dir] |
TARGET [target1 [target2 ...]] |
SOURCE [src1 [src2 ...]] |
TEST [test1 [test2 ...]]>
[APPEND]
PROPERTY <name> [value1 [value2 ...]])
在零個或多個範圍內的物件上設定一個屬性。第一個參數決定屬性設定的範圍。它必須是下列其中之一:
GLOBAL 範圍是唯一的,不接受名稱。
DIRECTORY 範圍預設為目前的目錄,但可以使用完整或相對路徑命名另一個目錄(已經被 CMake 處理過)。
`TARGET` 範圍可以命名零個或多個現有的目標。
`SOURCE` 範圍可以命名零個或多個來源檔案。
`TEST` 範圍可以命名零個或多個現有的測試。
必要的 `PROPERTY` 選項之後會立即跟著要設定的屬性名稱。其餘的參數會以分號分隔的列表形式,用於組成屬性值。如果給定 `APPEND` 選項,則該列表會附加到任何現有的屬性值。
site_name
:將給定的變數設定為電腦名稱。site_name(variable)
string
:字串操作。string(REGEX MATCH <regular_expression>
<output variable> <input> [<input>...])
string(REGEX MATCHALL <regular_expression>
<output variable> <input> [<input>...])
string(REGEX REPLACE <regular_expression>
<replace_expression> <output variable>
<input> [<input>...])
string(REPLACE <match_string>
<replace_string> <output variable>
<input> [<input>...])
string(COMPARE EQUAL <string1> <string2> <output variable>)
string(COMPARE NOTEQUAL <string1> <string2> <output variable>)
string(COMPARE LESS <string1> <string2> <output variable>)
string(COMPARE GREATER <string1> <string2> <output variable>)
string(ASCII <number> [<number> ...] <output variable>)
string(CONFIGURE <string1> <output variable>
[@ONLY] [ESCAPE_QUOTES])
string(TOUPPER <string1> <output variable>)
string(TOLOWER <string1> <output variable>)
string(LENGTH <string> <output variable>)
string(SUBSTRING <string> <begin> <length> <output variable>)
string(STRIP <string> <output variable>)
string(RANDOM [LENGTH <length>] [ALPHABET <alphabet>]
<output variable>)
`REGEX MATCH` 會比對正規表示式一次,並將比對結果儲存在輸出變數中。
`REGEX MATCHALL` 會盡可能多地比對正規表示式,並將比對結果以列表形式儲存在輸出變數中。
`REGEX REPLACE` 會盡可能多地比對正規表示式,並將比對結果替換為替換表示式。替換表示式可以使用 `\1`、`\2`、...、`\9` 來參照比對中的括號分隔子表示式。請注意,在 CMake 程式碼中需要使用兩個反斜線 (`\\1`),才能在參數解析中得到反斜線。
`REPLACE` 會將輸入字串中所有出現的 `match_string` 替換為 `replace_string`,並將結果儲存在輸出中。
`COMPARE EQUAL/NOTEQUAL/LESS/GREATER` 會比較字串,並將 `true` 或 `false` 儲存在輸出變數中。
`ASCII` 會將所有數字轉換為對應的 ASCII 字元。
`CONFIGURE` 會轉換字串,其方式與 `CONFIGURE_FILE` 轉換檔案的方式相同。
`TOUPPER/TOLOWER` 會將字串轉換為大寫/小寫字元。
`LENGTH` 會回傳給定字串的長度。
`SUBSTRING` 會回傳給定字串的子字串。
`STRIP` 會回傳移除開頭和結尾空格的子字串。
`RANDOM` 會回傳由給定字母表中的字元組成的隨機字串,字串長度由參數指定。預設長度為 5 個字元,預設字母表包含所有數字以及大小寫字母。
以下字元在正規表示式中具有特殊含義:
^ Matches at beginning of a line
$ Matches at end of a line
. Matches any single character
[ ] Matches any character(s) inside the brackets
[^ ] Matches any character(s) not inside the brackets
- Matches any character in range on either side of a dash
* Matches preceding pattern zero or more times
+ Matches preceding pattern one or more times
? Matches preceding pattern zero or once only
| Matches a pattern on either side of the |
() Saves a matched subexpression, which can be referenced in the REGEX REPLACE operation. Additionally it is saved in the special CMake variables CMAKE_MATCH_(0..9).
unset
:取消設定變數、快取變數或環境變數。unset(<variable> [CACHE])
移除指定的變數,使其變為未定義。如果存在 `CACHE`,則變數會從快取中移除,而不是從目前的範圍移除。
<variable> 可以是環境變數,例如:
unset(ENV{LD_LIBRARY_PATH})
在這種情況下,變數會從目前的環境中移除。
variable_watch
:監視 CMake 變數的變更。variable_watch(<variable name> [<command to execute>])
如果指定的變數發生變更,將會印出關於變數變更的訊息。如果指定了命令,則會執行該命令。該命令將會接收以下參數:`COMMAND(
while
:當條件為真時,評估一組命令。while(condition)
COMMAND1(ARGS ...)
COMMAND2(ARGS ...)
...
endwhile(condition)
在 `while` 和對應的 `endwhile` 之間的所有命令都會被記錄下來,而不會被調用。一旦評估了 `endwhile`,只要條件為真,就會調用記錄的命令列表。條件的評估邏輯與 `if` 命令相同。
write_file
:已棄用。請改用 `file(WRITE)` 命令。write_file(filename "message to write"... [APPEND])
第一個參數是檔案名稱,其餘參數是要寫入的訊息。如果指定了 `APPEND` 參數,則訊息會被附加到檔案的末尾。
注意 1:`file(WRITE ...)` 和 `file(APPEND ...)` 的作用與此命令完全相同,但還增加了其他功能。
注意 2:當使用 `write_file` 時,產生的檔案不能作為 CMake 的輸入(`CONFIGURE_FILE`、來源檔案等),因為這樣會導致無限迴圈。如果您想要產生 CMake 的輸入檔案,請使用 `configure_file`。
CMake Properties - Properties supported by CMake, the Cross-Platform Makefile Generator.
這是 CMake 所支援的屬性文件。屬性可以具有不同的範圍。它們可以被指派給來源檔案、目錄、目標或 CMake 的全域。透過修改屬性的值,可以自訂建置系統的行為。
CMake Compatibility Listfile Commands - Obsolete commands supported by CMake for compatibility.
這是來自先前 CMake 版本,現在已過時的列表檔案命令的文件,這些命令仍然為了相容性而受到支援。您應該改用更新、更快且更亮眼的新命令。 ;-)
版權 (c) 2002 Kitware, Inc., Insight Consortium. 保留所有權利。
允許以原始碼和二進位形式重新發佈和使用,無論是否經過修改,但須符合以下條件:
原始碼的重新發布必須保留上述的著作權聲明、本條款列表以及以下的免責聲明。
二進制形式的重新發布必須在隨發行提供的文件和/或其他材料中複製上述的著作權聲明、本條款列表以及以下的免責聲明。
未經事先明確的書面許可,不得使用 Kitware, Inc.、Insight Consortium 或任何聯盟成員或任何貢獻者的名稱來背書或促銷衍生自此軟體的產品。
修改後的原始碼版本必須明確標記為已修改,且不得謊稱是原始軟體。
本軟體由著作權持有人和貢獻者「依現狀」提供,且不對任何明示或暗示的擔保負責,包括但不限於對適銷性和特定用途適用性的暗示擔保。在任何情況下,作者或貢獻者均不對任何直接、間接、附帶、特殊、懲戒性或衍生性損害(包括但不限於替代商品或服務的採購;使用、數據或利潤的損失;或業務中斷)負責,無論其原因為何,亦無論其責任理論是基於契約、嚴格責任或侵權(包括過失或其他),即使已被告知發生此類損害的可能性。
以下資源可協助您使用 CMake
首頁
:http://www.cmake.org學習 CMake 的主要起點。
常見問題
:http://www.cmake.org/Wiki/CMake_FAQ此 Wiki 提供常見問題的解答。
線上文件
:http://www.cmake.org/HTML/Documentation.html您可以在此網頁上找到可用文件的連結。
郵件列表
:http://www.cmake.org/HTML/MailingLists.html若要取得有關使用 CMake 的協助和討論,請加入 cmake@cmake.org 的郵件列表。此列表僅限會員發文,但您可以在 CMake 網頁上註冊。請在向列表提出問題之前,先閱讀 http://www.cmake.org 上的完整文件。
實用連結摘要
Home: http://www.cmake.org
Docs: http://www.cmake.org/HTML/Documentation.html
Mail: http://www.cmake.org/HTML/MailingLists.html
FAQ: http://www.cmake.org/Wiki/CMake_FAQ