Stu*_*erg 39
调用者需要您的宏定义中指定的任何参数.但是,只要宏未在宏定义中明确命名,您的宏仍然可以接受可选参数.
也就是说,允许调用者传入额外的参数(在宏的参数列表中没有命名).您的宏可以通过检查${ARGN}
变量来检查是否存在此类额外参数.
注意:ARGN
不是"正常"的cmake变量.要在list()
命令中使用它,您需要先将其复制到普通变量中:
macro (mymacro required_arg1 required_arg2)
# Cannot use ARGN directly with list() command,
# so copy it to a variable first.
set (extra_macro_args ${ARGN})
# Did we get any optional args?
list(LENGTH extra_macro_args num_extra_args)
if (${num_extra_args} GREATER 0)
list(GET extra_macro_args 0 optional_arg)
message ("Got an optional arg: ${optional_arg}")
endif ()
endmacro (mymacro)
Run Code Online (Sandbox Code Playgroud)
Jes*_*erE 15
CMake不会(AFAIK)检查传递给宏的变量数量,因此您可以继续将其声明为任何其他宏.
还有一个变量${ARGN}
扩展为传递给宏的所有"剩余"变量的列表,这可能很有用.
更新 如Sam的评论中所述,除非在调用宏或函数时给出所有预期(命名)参数,否则CMake现在会失败.
归档时间: |
|
查看次数: |
19129 次 |
最近记录: |