代码之家  ›  专栏  ›  技术社区  ›  amit kumar

cmake宏中的可选参数

  •  19
  • amit kumar  · 技术社区  · 15 年前

    我想创建一个参数为可选的宏。如果未指定,则参数的值应为空字符串。我该怎么做?谢谢你的帮助。

    3 回复  |  直到 7 年前
        1
  •  15
  •   Community Navdeep Singh    7 年前

    cmake不会(afaik)检查传递给宏的变量数量,因此您可以继续执行并将其声明为任何其他宏。

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

    更新 如上所述 Sam comment ,除非在调用宏或函数时给出所有预期(命名)参数,否则cmake现在将失败。

        2
  •  37
  •   Stuart Berg    7 年前

    任何参数 在宏定义中命名 是呼叫者所必需的。但是,只要在宏定义中没有显式命名可选参数,则宏仍然可以接受这些参数。

    也就是说,允许呼叫者通过 额外的 参数(未在宏的参数列表中命名)。您的宏可以通过检查 ${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)
    
        3
  •  0
  •   Mike McQuaid    15 年前

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