【发布时间】:2009-08-28 12:32:16
【问题描述】:
我想创建一个参数是可选的宏。如果未指定,则参数的值应为空字符串。我该怎么做?
【问题讨论】:
标签: cmake
我想创建一个参数是可选的宏。如果未指定,则参数的值应为空字符串。我该怎么做?
【问题讨论】:
标签: cmake
调用者需要在宏定义中命名的任何参数。但是,您的宏仍然可以接受可选参数,只要它们没有在宏定义中明确命名。
也就是说,调用者可以传入extra 参数(未在宏的参数列表中命名)。您的宏可以通过检查 ${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 (variadic_args ${ARGN})
# Did we get any optional args?
list(LENGTH variadic_args variadic_count)
if (${variadic_count} GREATER 0)
list(GET variadic_args 0 optional_arg)
message ("Got an optional arg: ${optional_arg}")
endif ()
endmacro (mymacro)
【讨论】:
【讨论】:
${ARGN} 检查这些额外的参数。注意:ARGN 不是“正常”的 cmake 变量。要将其与 list() 命令一起使用,您需要先将其复制到一个普通变量中:set(extra_macro_args ${ARGN})。然后您可以执行list(LENGTH extra_macro_args num_extra_args) 后跟if( ${num_extra_args} GREATER 0) yadayadayada 之类的操作
如果未指定参数,则默认情况下会发生这种情况,因为 CMake 不检查宏所需的参数数量。
【讨论】: