Spec-Zone.ru › CMake 3.12

cmake_parse_arguments

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–2019 Kitware, Inc. and Contributors
Licensed under the BSD 3-clause License.
https://cmake.org/cmake/help/v3.12/command/cmake_parse_arguments.html

Spec-Zone.ru

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