函数

开始记录函数,稍后可以作为命令调用。

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 变量,该变量会被设置为传给函数的参数数量,以及 ARGV0ARGV1ARGV2,... 等包含传参的实际值。这有助于创建具有可选参数的函数。

此外,ARGV 包含给该函数的所有参数的列表,ARGN 包含超出最后预期参数的参数的列表。引用超出 ARGCARGV# 参数的行为是未定义的。仅检查 ARGC 是否大于 # 才可以确保将 ARGV# 作为附加参数传给函数。

请参见