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> содержит все опции для соответствующего макроса, т.е. ключевые слова, которые могут быть использованы при вызове макроса без последующего значения, например, ключевое слово OPTIONAL команды install().
Аргумент <one_value_keywords> содержит все ключевые слова для этого макроса, которые следуют за одним значением, например, ключевое слово DESTINATION команды install().
Аргумент <multi_value_keywords> содержит все ключевые слова для этого макроса, за которыми могут следовать более одного значения, например, ключевые слова TARGETS или FILES команды install().
Изменено в версии 3.5: Все ключевые слова должны быть уникальными. Т.е. каждое ключевое слово должно быть указано только один раз в <options>, <one_value_keywords> или <multi_value_keywords>. Будет выведено предупреждение, если уникальность нарушена.
По завершении, cmake_parse_arguments рассмотрит для каждого из ключевых слов, перечисленных в <options>, <one_value_keywords> и <multi_value_keywords>, переменную, составленную из заданного <prefix> плюс "_" и имени соответствующего ключевого слова. Эти переменные будут содержать соответствующее значение из списка аргументов или будут неопределёнными, если соответствующая опция не найдена. Для ключевых слов <options> они всегда будут определены, в TRUE или FALSE, независимо от того, присутствует ли опция в списке аргументов или нет.
Все оставшиеся аргументы собираются в переменной <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.
См. также
© 2000–2024 Kitware, Inc. and Contributors
Licensed under the BSD 3-clause License.
https://cmake.org/cmake/help/v3.29/command/cmake_parse_arguments.html