function¶
開始記錄一個函式,以供稍後作為命令調用。
function(<name> [<arg1> ...])
<commands>
endfunction()
定義一個名為 <name>
的函式,該函式接受名為 <arg1>
, ... 的參數。函式定義中的 <commands>
會被記錄下來;它們在函式被調用之前不會被執行。
依照舊例,endfunction()
命令允許一個可選的 <name>
參數。如果使用,它必須與開頭 function
命令的參數完全相同。
函式會開啟一個新的作用域:詳見 set(var PARENT_SCOPE)
以了解詳細資訊。
關於函式內策略的行為,請參閱 cmake_policy()
命令的文件。
關於 CMake 函式和巨集之間的差異,請參閱 macro()
命令的文件。
調用方式¶
函式調用不區分大小寫。一個定義為
function(foo)
<commands>
endfunction()
的函式可以透過以下任何一種方式調用
foo()
Foo()
FOO()
cmake_language(CALL foo)
等等。然而,強烈建議保持與函式定義中選擇的大小寫一致。通常函式使用全小寫名稱。
版本 3.18 新增: cmake_language(CALL ...)
命令也可以用來調用函式。
參數¶
當函式被調用時,記錄的 <commands>
首先會被修改,將形式參數 (${arg1}
, ...) 替換為傳遞的參數,然後作為普通命令調用。
除了引用形式參數外,您還可以引用 ARGC
變數,它將被設定為傳遞給函式的參數數量,以及 ARGV0
、ARGV1
、ARGV2
、...,它們將具有傳遞參數的實際值。這有助於創建具有可選參數的函式。
此外,ARGV
保留了傳遞給函式的所有參數的列表,而 ARGN
保留了超出最後一個預期參數的參數列表。引用超出 ARGC
的 ARGV#
參數具有未定義的行為。檢查 ARGC
是否大於 #
是確保 ARGV#
作為額外參數傳遞給函式的唯一方法。