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, которая будет неопределённой, если все аргументы были распознаны. Это можно проверить позже, чтобы узнать, был ли ваш макрос вызван с нераспознанными параметрами.
В качестве примера приведён 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)
После вызова 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"
Затем вы можете продолжить и обработать эти переменные.
Ключевые слова завершают списки значений, например, если непосредственно после ключевого слова one_value_keyword следует другое распознанное ключевое слово, это интерпретируется как начало новой опции. Например, my_install(TARGETS foo DESTINATION OPTIONAL) приведет к тому, что MY_INSTALL_DESTINATION будет установлено в "OPTIONAL", но так как OPTIONAL само является ключевым словом, MY_INSTALL_DESTINATION будет пустым, а MY_INSTALL_OPTIONAL соответственно будет установлено в TRUE.
© 2000–2020 Kitware, Inc. and Contributors
Licensed under the BSD 3-clause License.
https://cmake.org/cmake/help/v3.14/command/cmake_parse_arguments.html