CMake 手冊詳解(二十)

2021-09-22 22:06:36 字數 3489 閱讀 2011

cmd#51: list列表操作命令。

使用length選項時,該命令會返回給定list的長度。

使用get選項時,該命令返回list中所有被index索引的元素構成的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。

當使用指定索引的命令格式時,如果是大於等於0的數,是從list第乙個項開始的序號,list的第一項的索引是0。如果小於等於-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 [loc2 ...])
該命令將在給定的路徑下查詢名字為cmcommand_name的乙個庫。如果找到了,它將會以模組的方式被載入,然後該命令將會被新增到可用的cmake命令集中。通常,try_compile選項被用在這個命令之前來編譯這個模組。如果該命令被成功載入,乙個名為cmake_loaded_command_的變數將會被設定為這個載入模組的完整路徑。否則,這個變數就不會被設定。

cmd#54:macro為後續以命令方式呼叫而開始記錄一組巨集。

macro([arg1 [arg2 [arg3 ...]]])

command1(args ...)

command2(args ...)

...endmacro()

定義乙個名為的巨集,它以arg1 arg2 arg3 (...)為引數。在macro命令之後,在與之配對的endmacro命令之前出現的命令,只有在巨集被呼叫的時候才會被呼叫。當被呼叫的時候,這些被記錄的命令首先以傳進來的實參替換掉形參(如$),然後像正常的命令那樣執行。除了形參之外,你還可以引用變數$,它表示傳遞到巨集裡的引數的數量;$, $, $ ...等等則是傳進來的實參值。這些變數使得建立帶可選引數的巨集變得很便捷。此外,變數$保留了所有傳遞到巨集裡的所有引數組成的乙個list,變數$保留了在最後乙個形參之後的引數組成的乙個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 )
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警告和錯誤訊息的文字顯示使用的是一種簡單的標記語言。文字沒有縮排,超過長度的行會回卷,段落之間以新行做為分隔符。

from:

CMake 手冊詳解(五)

cmd 2 add custom target新增乙個目標,它沒有輸出 這樣它就總是會被構建。add custom target name all command1 args1.command command2 args2.depends depend depend depend working d...

CMake手冊詳解 (九)

cmd 17 else 開始乙個if語句塊的else部分。else expression 參見if命令。cmd 18 elseif 開始if 塊的 elseif 部分。elseif expression 參見if命令。cmd 19 enable language 支援某種語言 cxx c fortr...

CMake手冊詳解 (十二)

find library name1 path1 path2 這是該命令的簡寫版本,在大多數場合下都已經夠用了。它與命令find library name1 paths path1 path2 等價。find library name names name1 name2 hints path1 pa...