如何编写包含多个参数组的cmake函数?

如何编写包含多个参数组的cmake函数?,cmake,Cmake,例如,我想用以下语法编写一个my_add_lib函数: my_add_lib(NAME <name> SRCS [src1 [src2 ...]] DEPS [dependency1 [dependancy2 ...]]]) 我的添加库(名称) SRCS[src1[src2…]] DEPS[dependency1[Dependency2…]] 如何实现这些“参数组”?CMake提供了可以为您进行参数解析的模块。例如: include(C

例如,我想用以下语法编写一个
my_add_lib
函数:

my_add_lib(NAME <name>
           SRCS [src1 [src2 ...]]
           DEPS [dependency1 [dependancy2 ...]]])
我的添加库(名称)
SRCS[src1[src2…]]
DEPS[dependency1[Dependency2…]]
如何实现这些“参数组”?

CMake提供了可以为您进行参数解析的模块。例如:

include(CMakeParseArguments)

function(my_add_lib)
    cmake_parse_arguments(
        PARSED_ARGS # prefix of output variables
        "" # list of names of the boolean arguments (only defined ones will be true)
        "NAME" # list of names of mono-valued arguments
        "SRCS;DEPS" # list of names of multi-valued arguments (output variables are lists)
        ${ARGN} # arguments of the function to parse, here we take the all original ones
    )
    # note: if it remains unparsed arguments, here, they can be found in variable PARSED_ARGS_UNPARSED_ARGUMENTS
    if(NOT PARSED_ARGS_NAME)
        message(FATAL_ERROR "You must provide a name")
    endif(NOT PARSED_ARGS_NAME)
    message("Provided sources are:")
    foreach(src ${PARSED_ARGS_SRCS})
        message("- ${src}")
    endforeach(src)
endfunction(my_add_lib)

CMAX 3.5,CMACHORPARSEGORIZION/CODE >成为Buffin命令(用C++编写而不是CMAGE):<代码>包含(CMAPARSARGARGORIVIES)不再需要,但是,现在,CMACHOPARSELGUMUMET.CSFILE保持空,以兼容。< / P>只使用标准模块,不要重写轮子。这就是我所追求的。我希望你能给我一个答案,这样我就可以投票接受了!非常感谢。如果像我一样,您正在将现有函数转换为使用
cmake\u parse\u arguments()
,您可能会犯与我相同的错误,忘记从函数签名中删除函数的前参数。在这种情况下,
${ARGN}
将不是调用者传入的参数。相反,对我来说,这是一个奇怪的混搭,它将我指定给
cmake_parse_arguments()
的参数名与后来分配给函数体中原始参数的变量名混搭在一起。