参考了两位大神的说明,自己跑了一下,发现有些出入,可能是版本问题,我定义 CMake VERSION 至少是 3.10 版本
下面是我自己跑的结果:
CMake 中的宏(macro)和函数(function)都支持动态参数
专用变量 ARGC: 代表的是函数或者宏传递的参数个数。
专用变量 ARGV :代表所有传递的参数,使用list表示,其中如果函数有多个参数,要取得某个参数可以使用ARGV0,ARGV1,ARGV2 等。
专用变量 ARGV0,ARGV1,… :顺序代表传入的参数
专用变量 ARGN : 包含传入参数的 list, 与ARGV不同的是并不是代表所有参数,而是指宏或者函数声明的参数之后的所有参数。
project(argTest)
cmake_minimum_required(VERSION 3.10)
# 定义一个宏,显式声明了两个参数 para1, para2
macro(argn_test para1 para2)
MESSAGE(STATUS ARGC=${ARGC})
MESSAGE(STATUS ARGV=${ARGV})
MESSAGE(STATUS ARGN=${ARGN})
MESSAGE(STATUS ARGV0=${ARGV0})
MESSAGE(STATUS ARGV1=${ARGV1})
MESSAGE(STATUS ARGV2=${ARGV2})
MESSAGE(STATUS ARGV3=${ARGV3})
endmacro(argn_test para1 para2)
# 调用宏时传入4个参数
arg_test(para_1, para_2,para_3,para_4)
CMake 脚本执行
mkdir build && cd build && cmake ..
输出结果中会显示
-- ARGC=4
-- ARGV=para_1,para_2,para_3,para_4
-- ARGN=para_3,para_4
-- ARGV0=para_1,
-- ARGV1=para_2,
-- ARGV2=para_3,
-- ARGV3=para_4
参考链接如下:
CMake中的ARGC ARGV 和ARGN参数意义
cmake:macro,function中ARGV,ARGN参数的区别