目录
1. 语法
1.1 macro 大小写不敏感
宏调用其实就是将宏中的内容复制到调用的地方
macro(my_macro)
set(RET 1)
message("RET = ${RET}")
endmacro()
my_macro()
MY_macro()

1.2. 固定参数
实参个数只能比形参个数多,不能比形参个数少
macro(foo_fixed arg1 arg2)
message("arg1 = ${arg1} arg2 = ${arg2}")
if(${arg1}) #宏参数不是变量,不能用于逻辑运算,需要加${}
message("arg1 is true!")
endif()
endmacro()
foo_fixed(1 "test")

1.3 变参
ARGC:参数个数
ARGN::参数数组
ARGV0:0号参数,ARGV1等依次类推
macro(foo_var)
message("argc = ${ARGC}")
foreach(var IN ITEMS ${ARGN})
message("var = ${var}")
endforeach()
message("ARGV0 = ${ARGV0}")
endmacro()
foo_var("var1" "var2" "var3")

1.4 属性式参数
macro(my_parse)
message("ARGN = ${ARGN}")
cmake_parse_arguments(
"MY" #前缀
"LOG;FILE" #option类型,可选项
"BIN;LIB" #单值
"TARGETS" #多值
${ARGN} #参数数组
)
#变量名加前缀
message("MY_LOG = ${MY_LOG}")
message("MY_FILE = ${MY_FILE}")
message("MY_BIN = ${MY_BIN}")
message("MY_LIB = ${MY_LIB}")
message("MY_TARGETS = ${MY_TARGETS}")
#MY_UNPARSED_ARGUMENTS:类型传递错误
message("MY_UNPARSED_ARGUMENTS = ${MY_UNPARSED_ARGUMENTS}")
#MY_KEYWORDS_MISSING_VALUES: 未传递值
message("MY_KEYWORDS_MISSING_VALUES = ${MY_KEYWORDS_MISSING_VALUES}")
endmacro()
my_parse(LOG FILE
BIN "bin"
TARGETS "TAR1" "TAR2"
LIB "lib")

1.5 属性式参数错误传递
my_parse(LOG FILE
BIN "bin1" "bin2" #应为单值,这里传的多值
TARGETS "TAR1" "TAR2"
LIB "lib")

1112

被折叠的 条评论
为什么被折叠?



