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 變數,該變數將設定為傳遞給函式的參數數量,以及 ARGV0ARGV1ARGV2、...,這些變數將具有傳入參數的實際值。這有助於建立具有可選參數的函式。

此外,ARGV 保存給函式的所有參數的列表,而 ARGN 保存超出最後一個預期參數的參數列表。引用超出 ARGCARGV# 參數具有未定義的行為。檢查 ARGC 是否大於 # 是確保 ARGV# 作為額外參數傳遞給函式的唯一方法。

另請參閱