函数¶
开始记录函数,稍后可以作为命令调用。
function(<name> [<arg1> ...])
<commands>
endfunction()
定义名为 <name>
的函数,该函数接收名为 <arg1>
的参数,...函数定义中的 <commands>
会被记录;它们将在调用函数之前不被执行。
endfunction()
命令根据传统允许指定 <name>
参数。如果使用,则必须与调用 function
命令的参数完全一致。
函数打开新的作用域:请参阅 set(var PARENT_SCOPE)
了解更多详情。
请参阅 cmake_policy()
命令文档,了解函数内策略的行为。
请参阅 macro()
命令文档,了解 CMake 函数和宏的区别。
调用¶
函数调用区分大小写。作为
function(foo)
<commands>
endfunction()
什么方式的调用都可以
foo()
Foo()
FOO()
cmake_language(CALL foo)
等等。但是强烈建议保持函数定义中选择的大小写。通常,函数都会采用全部小写字母的名称。
3.18 版本中新增: cmake_language(CALL ...)
命令也可用于调用此函数。
参数¶
调用函数时,首先通过用传递的参数替换形式参数(${arg1}
,...),修改记录的 <commands>
,然后作为普通命令调用。
除了引用形式化参数外,还可以引用 ARGC
变量,该变量会被设置为传给函数的参数数量,以及 ARGV0
、ARGV1
、ARGV2
,... 等包含传参的实际值。这有助于创建具有可选参数的函数。
此外,ARGV
包含给该函数的所有参数的列表,ARGN
包含超出最后预期参数的参数的列表。引用超出 ARGC
的 ARGV#
参数的行为是未定义的。仅检查 ARGC
是否大于 #
才可以确保将 ARGV#
作为附加参数传给函数。