CMD#51: 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選項時,該命令會返回給定list的長度。
使用GET選項時,該命令返回list中所有被index索引的元素構成的list。
使用APPEND選項時,該命令將會在該list之后追加若干元素。
使用FIND選項時,該命令將返回list中指定的元素的索引;若果未找到,返回-1。
使用INSERT選項時,該命令將在list中指定的位置插入若干元素。
使用REMOVE_AT和REMOVE_ITEM選項將會從list中刪除一些元素。它們之間的區別是:REMOVE_ITEM刪除的是指定的項,而REMOVE_AT刪除的是在指定索引處的項。
使用REMOVE_DUPLICATES選項時,該命令將刪除list中的重復項。
使用REVERSE選項時,該命令將把list的內容就地前后倒換。
使用SORT選項時,該命令將按字母序對list總的內容就地排序。
注意:在CMake中,一個list是一個由封號;分割的一組字符串。使用set命令可以創建一個list。例如,set(var a b c d e)命令將會創建一個list:a;b;c;d;e;而set(var "a b c d e")命令創建的只是一個字符串,或者說是只有一個項的list。
當使用指定索引的命令格式時,如果<element index>是大於等於0的數,<element index>是從list第一個項開始的序號,list的第一項的索引是0。如果<element index>小於等於-1,這個索引是從結尾開始的逆向索引,其中-1表示的是list的最后一項。當使用負數索引時,注意它們不是從0開始!-0與0等價,它指向list的第一個成員。
CMD#52:load_cache
從另一個工程的CMake cache中加載值。
load_cache(pathToCacheFile READ_WITH_PREFIX
prefix entry1...)
該命令讀取指定的cache文件,並將以請求的前綴為其前綴的那些cache文件中的entry(ies)保存到變量中。這個格式僅僅讀取值,但是不在本地工程的cache中創建entry(ies)。
load_cache(pathToCacheFile [EXCLUDE entry1...]
[INCLUDE_INTERNALS entry1...])
從另一個cache文件中加載值並像內部entry(ies)那樣,將它們存儲到本地工程的cache中。這條命令對於一個依賴於另一個不同構建樹上的另一個工程的工程比較有用。EXCLUDE選項給出了那些需要排除在外的entry(ies)的一個list。INCLUDE_INTERNALS選項給出了需要包含的entry(ies)的內部entry(ies)的一個list。通常情況下,不需要引入內部entry(ies)。強烈不推薦使用該命令的這種格式,但是它可以被用來維持向后兼容性。
CMD#53:load_command
將一條命令加載到一個運行中的CMake。
load_command(COMMAND_NAME <loc1> [loc2 ...])
該命令將在給定的路徑下查找名字為cmCOMMAND_NAME的一個庫。如果找到了,它將會以模塊的方式被加載,然后該命令將會被添加到可用的CMake命令集中。通常,TRY_COMPILE選項被用在這個命令之前來編譯這個模塊。如果該命令被成功加載,一個名為CMAKE_LOADED_COMMAND_<COMMAND_NAME>的變量將會被設置為這個加載模塊的完整路徑。否則,這個變量就不會被設置。
CMD#54:macro
為后續以命令方式調用而開始記錄一組宏。
macro(<name> [arg1 [arg2 [arg3 ...]]])
COMMAND1(ARGS ...)
COMMAND2(ARGS ...)
...
endmacro(<name>)
定義一個名為<name>的宏,它以arg1 arg2 arg3 (...)為參數。在macro命令之后,在與之配對的endmacro命令之前出現的命令,只有在宏被調用的時候才會被調用。當被調用的時候,這些被記錄的命令首先以傳進來的實參替換掉形參(如${arg1}),然后像正常的命令那樣執行。除了形參之外,你還可以引用變量${ARGC},它表示傳遞到宏里的參數的數量;${ARG0}, ${ARG1}, ${ARG2} ...等等則是傳進來的實參值。這些變量使得創建帶可選參數的宏變得很便捷。此外,變量${ARGV}保留了所有傳遞到宏里的所有參數組成的一個list,變量${ARGN}保留了在最后一個形參之后的參數組成的一個list。注意:傳遞到宏內部的參數和值,比如ARGN不是CMake通常意義下的變量;它們只是字符串替換,這一點非常像C預處理器對C語言宏的處理過程。如果你想要用真正的CMake變量,你應該查看一下function命令的說明。
關於在macro內部的策略的行為,參見cmake_policy()命令的相關文檔。
CMD#55:mark_as_advanced
將CMake 的緩存變量標記為高級。
mark_as_advanced([CLEAR|FORCE] VAR VAR2 VAR...)
將緩存的變量標記為高級變量。其中,高級變量指的是那些在cmake GUI中,只有當“顯示高級選項”被打開時才會被顯示的變量。如果CLEAR是第一個選項,參數中的高級變量將變回非高級變量。如果FORCE是第一個選項,參數中的變量會被提升為高級變量。如果兩者都未出現,新的變量會被標記為高級變量;如果這個變量已經是高級/非高級狀態的話,它將會維持原狀。
該命令在腳本中無效。
CMD#56:math
數學表達式。
math(EXPR <output variable> <math expression>)
EXPR計算數學表達式然后通過output變量返回計算結果。數學表達式的一個例子是"5*(10+13)"。該命令支持的運算符包括:+ - * / % ^ ~ << >> ;它們的含義與C語言中的完全一致。
CMD#57:message
為用戶顯示一條消息。
message([STATUS|WARNING|AUTHOR_WARNING|FATAL_ERROR|SEND_ERROR]
"message to display" ...)
可以用下述可選的關鍵字指定消息的類型:
(無) = 重要消息;
STATUS = 非重要消息;
WARNING = CMake 警告, 會繼續執行;
AUTHOR_WARNING = CMake 警告 (dev), 會繼續執行;
SEND_ERROR = CMake 錯誤, 繼續執行,但是會跳過生成的步驟;
FATAL_ERROR = CMake 錯誤, 終止所有處理過程;
CMake的命令行工具會在stdout上顯示STATUS消息,在stderr上顯示其他所有消息。CMake的GUI會在它的log區域顯示所有消息。交互式的對話框(ccmake和CMakeSetup)將會在狀態行上一次顯示一條STATUS消息,而其他格式的消息會出現在交互式的彈出式對話框中。
CMake警告和錯誤消息的文本顯示使用的是一種簡單的標記語言。文本沒有縮進,超過長度的行會回卷,段落之間以新行做為分隔符。