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>…中传递的参数,读到的参数可用于宏()或者函数()
- 3.7新版功能:PARSE_ARGV签名只用于function()函数体。在本例中,解析的参数来自调用函数的
argv#
变量。解析从<N>-
第一个参数开始,其中<N>
是一个无符号整数。这允许值具有特殊字符,如; - < options>参数包含相应宏的所有选项,即在调用宏时可以使用的关键字,而不需要下面的任何值,例如install()命令的可选关键字
考虑下面的示例宏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",但由于可选是一个关键字本身,MY_INSTALL_DESTINATION将为空(但添加到MY_INSTALL_KEYWORDS_MISSING_VALUES中),因此MY_INSTALL_OPTIONAL将被设置为TRUE。