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>)
Эта команда используется в макросах или функциях. Она обрабатывает аргументы, переданные этому макросу или функции, и определяет набор переменных, содержащих значения соответствующих опций.
Первый вариант обрабатывает аргументы, переданные в <args>.... Это можно использовать как в macro(), так и в function().
Вариант PARSE_ARGV предназначен только для использования в теле function(). В этом случае аргументы, которые анализируются, берутся из переменных ARGV# вызывающей функции. Анализ начинается с <N>-го аргумента, где <N> — целое без знака. Это позволяет значениям содержать специальные символы, например, ;.
Аргумент <options> содержит все опции для соответствующего макроса, т. е. ключевые слова, которые можно использовать при вызове макроса без значения, например, ключевое слово OPTIONAL команды install().
Аргумент <one_value_keywords> содержит все ключевые слова для этого макроса, за которыми следует одно значение, например, ключевое слово DESTINATION команды install().
Аргумент <multi_value_keywords> содержит все ключевые слова для этого макроса, за которыми может следовать более одного значения, например, ключевые слова TARGETS или FILES команды install().
Примечание
Все ключевые слова должны быть уникальными. То есть каждое ключевое слово должно быть указано только один раз в <options>, <one_value_keywords> или <multi_value_keywords>. Если уникальность нарушена, будет выведено предупреждение.
По окончании работы, cmake_parse_arguments для каждого из ключевых слов, перечисленных в <options>, <one_value_keywords> и <multi_value_keywords>, создаст переменную, состоящую из заданного <prefix> , за которым следует "_" и имя соответствующего ключевого слова. Эти переменные будут содержать соответствующее значение из списка аргументов или будут неопределёнными, если соответствующая опция не найдена. Для ключевых слов <options> они всегда будут определены, со значением TRUE или FALSE, независимо от того, есть ли опция в списке аргументов или нет.
Все оставшиеся аргументы собираются в переменной <prefix>_UNPARSED_ARGUMENTS, которая будет неопределённой, если все аргументы распознаны. Это можно проверить позже, чтобы убедиться, что ваш макрос не был вызван с нераспознанными параметрами.
Ключевые слова <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.
© 2000–2020 Kitware, Inc. and Contributors
Licensed under the BSD 3-clause License.
https://cmake.org/cmake/help/v3.17/command/cmake_parse_arguments.html