CMake函数参数
在 CMake 中,当定义一个函数时,会自动创建一些特殊的变量来处理函数的参数,下面分别介绍 ARGN
、ARGC
、ARGV
、ARGV0
、ARGV1
等变量的含义,并给出相应的示例。
各变量含义
-
ARGC
- 含义:表示传递给函数的参数的数量。它是一个整数,反映了调用函数时提供的参数个数。
-
ARGV
- 含义:是一个包含所有传递给函数的参数的列表。列表中的元素顺序与参数传递的顺序一致。
-
ARGV0
、ARGV1
、ARGV2
…- 含义:分别表示传递给函数的第 0 个、第 1 个、第 2 个 … 参数。索引从 0 开始,
ARGV0
就是第一个传递的参数,ARGV1
是第二个传递的参数,依此类推。
- 含义:分别表示传递给函数的第 0 个、第 1 个、第 2 个 … 参数。索引从 0 开始,
-
ARGN
- 含义:当函数定义时指定了参数名,
ARGN
包含除了这些指定参数之外的所有额外参数。如果函数定义时没有指定参数名,ARGN
就等同于ARGV
。
- 含义:当函数定义时指定了参数名,
示例代码
# 定义一个函数,演示参数变量的使用
function(demo_function arg1 arg2)
# 输出参数数量
message("ARGC: ${ARGC}")
# 输出所有参数的列表
message("ARGV: ${ARGV}")
# 输出第一个和第二个参数
message("ARGV0: ${ARGV0}")
message("ARGV1: ${ARGV1}")
# 输出额外的参数(如果有)
if(ARGN)
message("ARGN: ${ARGN}")
else()
message("No additional arguments (ARGN is empty).")
endif()
endfunction()
# 调用函数,传递两个参数
demo_function("param1" "param2")
# 调用函数,传递四个参数
demo_function("param1" "param2" "extra1" "extra2")
代码解释
-
函数定义:
demo_function
函数定义了两个参数arg1
和arg2
。 -
第一次调用:
demo_function("param1" "param2")
ARGC
的值为 2,因为传递了两个参数。ARGV
是一个包含"param1"
和"param2"
的列表。ARGV0
是"param1"
,ARGV1
是"param2"
。- 由于没有额外的参数,
ARGN
为空。
-
第二次调用:
demo_function("param1" "param2" "extra1" "extra2")
ARGC
的值为 4,因为传递了四个参数。ARGV
是一个包含"param1"
、"param2"
、"extra1"
和"extra2"
的列表。ARGV0
是"param1"
,ARGV1
是"param2"
。ARGN
是一个包含"extra1"
和"extra2"
的列表,即除了函数定义的arg1
和arg2
之外的额外参数。
通过这个示例,你可以清楚地看到这些特殊变量在处理函数参数时的具体作用。