Spec-Zone.ru › CMake 3.26

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.

См. также

  • function()
  • macro()

© 2000–2023 Kitware, Inc. and Contributors
Licensed under the BSD 3-clause License.
https://cmake.org/cmake/help/v3.26/command/cmake_parse_arguments.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API