cmake宏中的可选参数

时间:2009-08-28 12:32:16

标签: cmake

我想创建一个参数是可选的宏。如果未指定,则参数的值应为空字符串。我怎样才能做到这一点?谢谢你的帮助。

3 个答案:

答案 0 :(得分:37)

调用者需要在宏定义中命名的任何参数。但是,只要宏未在宏定义中明确命名,您的宏仍然可以接受可选参数。

也就是说,允许调用者传入额外参数(在宏的参数列表中未命名)。您的宏可以通过检查${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)

答案 1 :(得分:15)

CMake没有(AFAIK)检查传递给宏的变量数量,因此您可以继续将其声明为任何其他宏。

还有一个变量${ARGN},它扩展为传递给宏的所有“剩余”变量的列表,这可能很有用。

<强>更新 正如Samcomment中所述,除非在调用宏或函数时给出所有预期(命名)参数,否则CMake现在会失败。

答案 2 :(得分:0)

如果未指定参数,则默认情况下会发生这种情况,因为CMake不会检查宏所需的参数数量。