cmake_parse_arguments

解析函数或宏参数。

cmake_parse_arguments(<prefix> <options> <one_value_keywords>
                      <multi_value_keywords> <args>...)

cmake_parse_arguments(PARSE_ARGV <N> <prefix> <options>
                      <one_value_keywords> <multi_value_keywords>)

在 3.5 版本加入: 此命令是本机实现的。以前,它已在模块 CMakeParseArguments 中定义。

此命令用于宏或函数中。它处理提供给该宏或函数的参数,并定义一组变量来保存各个选项的值。

第一个签名读取在 <args>... 中传递的进程参数。这可以在 macro()function() 中使用。

在 3.7 版本加入: PARSE_ARGV 签名仅用于 function() 主体。在这种情况下,解析的参数来自调用函数的 ARGV# 变量。解析从第一个参数“<N>”开始,其中“<N>”是一个无符号整数。这允许值中包含特殊字符,如 ;

<options> 参数包含相应宏的所有选项,即在调用宏时可以使用的关键字,后面没有任何值,例如 install() 命令的 OPTIONAL 关键字。

<one_value_keywords> 参数包含此宏的所有关键字,后面跟着一个值,例如``DESTINATION`` install() 命令的关键字。

<multi_value_keywords> 参数包含此宏的所有关键字,后面可以跟多个值,例如 install() 命令的``TARGETS`` 或``FILES`` 关键字。

在 3.5 版本发生变更: 所有关键字都应是唯一的。 IE。每个关键字只能在“<options>”、“<one_value_keywords>”或“<multi_value_keywords>”中指定一次。如果违反唯一性,将发出警告。

完成后,“cmake_parse_arguments”将为“<options>”、“<one_value_keywords>”和“<multi_value_keywords>”中列出的每个关键字考虑一个由给定的“<prefix”组成的变量>`` 后跟 "_" 和相应关键字的名称。然后这些变量将保存参数列表中的相应值,或者如果找不到关联的选项则未定义。对于 <options> 关键字,无论选项是否在参数列表中,它们将始终被定义为 TRUEFALSE

所有剩余的参数都收集在变量“<prefix>_UNPARSED_ARGUMENTS”中,如果所有参数都被识别,该变量将是未定义的。这可以在之后检查以查看是否使用无法识别的参数调用了您的宏。

在 3.15 版本加入: <one_value_keywords> 和``<multi_value_keywords>`` 根本没有给定任何值,它们被收集在变量``<prefix>_KEYWORDS_MISSING_VALUES`` 中,如果所有关键字都收到值,则该变量将是未定义的。这可以检查以查看是否存在没有给定任何值的关键字。

考虑以下示例宏,my_install(),它采用与实际 install() 命令类似的参数:

macro(my_install)
    set(options OPTIONAL FAST)
    set(oneValueArgs DESTINATION RENAME)
    set(multiValueArgs TARGETS CONFIGURATIONS)
    cmake_parse_arguments(MY_INSTALL "${options}" "${oneValueArgs}"
                          "${multiValueArgs}" ${ARGN} )

    # ...

假设 my_install() 被这样调用:

my_install(TARGETS foo bar DESTINATION bin OPTIONAL blub CONFIGURATIONS)

cmake_parse_arguments 调用之后,宏将设置或取消定义以下变量:

MY_INSTALL_OPTIONAL = TRUE
MY_INSTALL_FAST = FALSE # was not used in call to my_install
MY_INSTALL_DESTINATION = "bin"
MY_INSTALL_RENAME <UNDEFINED> # was not used
MY_INSTALL_TARGETS = "foo;bar"
MY_INSTALL_CONFIGURATIONS <UNDEFINED> # was not used
MY_INSTALL_UNPARSED_ARGUMENTS = "blub" # nothing expected after "OPTIONAL"
MY_INSTALL_KEYWORDS_MISSING_VALUES = "CONFIGURATIONS"
         # No value for "CONFIGURATIONS" given

然后您可以继续并处理这些变量。

关键字终止值列表,例如如果在 one_value_keyword 之后紧跟另一个可识别的关键字,这将被解释为新选项的开始。例如。 my_install(TARGETS foo DESTINATION OPTIONAL) 会导致 MY_INSTALL_DESTINATION 设置为 "OPTIONAL",但由于 OPTIONAL 本身就是关键字 MY_INSTALL_DESTINATION 将为空(但添加到 MY_INSTALL_KEYWORDS_MISSING_VALUES) 并且 MY_INSTALL_OPTIONAL 将因此设置为 TRUE

也可以看看

  • 功能()

  • 宏()