功能¶
开始记录函数以供以后作为命令调用。
function(<name> [<arg1> ...])
<commands>
endfunction()
定义一个名为 <name> 的函数,它接受名为 <arg1> 的参数,...函数定义中的 <commands> 被记录下来;在函数被调用之前它们不会被执行。
按照传统, endfunction() 命令接受一个可选的 <name> 参数。如果使用,则必须逐字重复开头的“function”命令的参数。
一个函数打开一个新的范围:查看:command: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# 作为额外参数传递给函数的唯一方法。
也可以看看¶
结束功能()返回()