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#
作为额外参数传递给函数的唯一方法。