CMake 手冊詳解(十六)


CMD#35 : foreach  對一個list中的每一個變量執行一組命令。

  foreach(loop_var arg1 arg2 ...)
COMMAND1(ARGS ...)
COMMAND2(ARGS ...)
...
endforeach(loop_var)

  所有的foreach和與之匹配的endforeach命令之間的命令會被記錄下來而不會被調用。等到遇到endforeach命令時,先前被記錄下來的命令列表中的每條命令都會為list中的每個變量調用一遍。在每次迭代中,循環變量${loop_var}將會被設置為list中的當前變量值。

  foreach(loop_var RANGE total)
foreach(loop_var RANGE start stop [step])

  foreach命令也可以遍歷一個人為生成的數據區間。遍歷的方式有三種:

  *如果指定了一個數字,區間是[0, total]。

  *如果指定了兩個數字,區間將會是第一個數字到第二個數字。

  *第三個數字是從第一個數字遍歷到第二個數字時的步長。

  foreach(loop_var IN [LISTS [list1 [...]]]
[ITEMS [item1 [...]]])

  該命令的含義是:精確遍歷一個項組成的list。LISTS選項后面是需要被遍歷的list變量的名字,包括空元素(一個空字符串是一個零長度list)。ITEMS選項結束了list參數的解析,然后在迭代中引入所有在其后出現的項。(猜測是用list1中的項item1,依次類推,為循環變量賦值。——譯注)

CMD#36 : function  開始記錄一個函數,為以后以命令的方式調用它做准備。

  function(<name> [arg1 [arg2 [arg3 ...]]])
COMMAND1(ARGS ...)
COMMAND2(ARGS ...)
...
endfunction(<name>)

  定義一個名為<name>的函數,它以arg1 arg2 arg3 (...)為參數。在function之后,對應的endfunction之前列出的命令,在函數被調用之前,是不會被調用的。當函數被調用時,在函數中記錄的那些命令首先會用傳進去的參數替換掉形參(${arg1});然后跟正常命令一樣去調用這些命令。除了形參,你還可以引用這些變量:ARGC為傳遞給函數的變量個數,ARGV0 ARGV1 ARGV2 ...表示傳到函數中的實參值。這些變量為編寫可選參數函數提供了便利。此外,ARGV保留了一個該函數所有實參的list,ARGN保留了函數形參列表以后的所有參數列表。

  參見cmake_policy()命令文檔中function內部策略行為的相關行為。

CMD#37 : get_cmake_property  獲取一個CMake實例的屬性。

  get_cmake_property(VAR property)

  從指定的CMake實例中獲取屬性。屬性的值存儲在變量VAR中。如果屬性不存在,CMake會報錯。一些會被支持的屬性包括:VATIABLES,COMMANDS,MACROS以及COMPONENTS。

CMD#38 : get_directory_property  獲取DIRECTORY域中的某種屬性。

  get_directory_property(<variable> [DIRECTORY <dir>] <prop-name>)

  在指定的變量中存儲路徑(directory)域中的某種屬性。如果該屬性沒有被定義,將會返回空字符串。DIRECTORY參數指定了要取出的屬性值的另一個路徑。指定的路徑必須已經被CMake遍歷過了。

   get_directory_property(<variable> [DIRECTORY <dir>]
                         DEFINITION <var-name>)

  該命令從一個路徑中獲取一個變量的定義。這種格式在從另一個路徑中獲取變量的定義時比較有用。

CMD#39 : get_filename_component 得到一個完整文件名中的特定部分。

  get_filename_component(<VAR> FileName
PATH|ABSOLUTE|NAME|EXT|NAME_WE|REALPATH
[CACHE])

  將變量<VAR>設置為路徑(PATH),文件名(NAME),文件擴展名(EXT),去掉擴展名的文件名(NAME_WE),完整路徑(ABSOLUTE),或者所有符號鏈接被解析出的完整路徑(REALPATH)。注意,路徑會被轉換為Unix的反斜杠(/),並且沒有結尾的反斜杠。該命令已經考慮了最長的文件擴展名。如果指定了CACHE選項,得到的變量會被加到cache中。

  get_filename_component(<VAR> FileName
PROGRAM [PROGRAM_ARGS <ARG_VAR>]
[CACHE])

  在FileName中的程序將會在系統搜索路徑中被查找,或者是一個完整路徑。如果與PRPGRAM一起給定了PROGRAM_ARGS選項,那么任何在Filename字符串中出現的命令行中選項將會從程序名中分割出來並存儲在變量<ARG_VAR>中。這可以用來從一個命令行字符串中分離程序名及其選項。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM