开始记录(声明)函数以供以后作为命令调用,是在cmake当中自定义函数的一种方式。
概述
function(<name> [<arg1> ...])
<commands>
endfunction()
定义一个名为<name>的函数,它接受名为<arg1>…的参数,记录函数定义中的<commands>; 在调用该函数之前它们不会被执行。<commands>可以理解为函数定义中的具体的操作。
按照传统, endfunction() 命令允许可选的<name> 参数。 如果使用,它必须是打开函数命令的参数的逐字重复。
定义函数会打开一个新作用域:有关作用域详细信息,请参阅 set(var PARENT_SCOPE)。
有关函数内原则的约束,请参阅 cmake_policy() 命令文档。
有关 CMake 函数和宏之间的差异,请参阅 Macro() 命令文档。
调用
函数调用不区分大小写。 函数定义为
function(foo)
<commands>
endfunction()
可以使用一下的方式进行调用
foo()
Foo()
FOO()
cmake_language(CALL foo)
等等。 但是,强烈建议保留函数定义中选择的情况。 通常,函数使用全小写名称。
参数
当调用该函数时,首先通过用传递的参数替换形式参数(${arg1},…)来修改记录的<commands>,然后像普通命令一样调用。
除了引用形式参数之外,您还可以引用 ARGC 变量,该变量将被设置为传递到函数中的参数数量,以及 ARGV0、ARGV1、ARGV2…,它们将具有传入参数的实际值。 这有助于创建带有可选参数的函数。
此外,ARGV 保存提供给函数的所有参数的列表,ARGN 保存最后一个预期参数之后的参数列表。 引用 ARGC 之外的 ARGV# 参数具有未定义的行为。 检查 ARGC 是否大于 # 是确保 ARGV# 作为额外参数传递给函数的唯一方法。