Spec-Zone.ru › CMake 3.16

list

Операции со списками.

Synopsis

Reading
  list(LENGTH <list> <out-var>)
  list(GET <list> <element index> [<index> ...] <out-var>)
  list(JOIN <list> <glue> <out-var>)
  list(SUBLIST <list> <begin> <length> <out-var>)

Search
  list(FIND <list> <value> <out-var>)

Modification
  list(APPEND <list> [<element>...])
  list(FILTER <list> {INCLUDE | EXCLUDE} REGEX <regex>)
  list(INSERT <list> <index> [<element>...])
  list(POP_BACK <list> [<out-var>...])
  list(POP_FRONT <list> [<out-var>...])
  list(PREPEND <list> [<element>...])
  list(REMOVE_ITEM <list> <value>...)
  list(REMOVE_AT <list> <index>...)
  list(REMOVE_DUPLICATES <list>)
  list(TRANSFORM <list> <ACTION> [...])

Ordering
  list(REVERSE <list>)
  list(SORT <list> [...])

Введение

Подкоманды списка APPEND, INSERT, FILTER, PREPEND, POP_BACK, POP_FRONT, REMOVE_AT, REMOVE_ITEM, REMOVE_DUPLICATES, REVERSE и SORT могут создавать новые значения для списка в текущем области видимости переменной CMake. Подобно команде set(), команда LIST создаёт новые значения переменных в текущей области видимости, даже если сам список фактически определён в области видимости родителя. Для распространения результатов этих операций вверх используйте set() с PARENT_SCOPE, set() с CACHE INTERNAL, или другие способы распространения значений.

Примечание

Список в cmake представляет собой группу строк, разделённых ;. Для создания списка можно использовать команду set. Например, set(var a b c d e) создаёт список с a;b;c;d;e, а set(var "a b c d e") создаёт строку или список с одним элементом. (Обратите внимание, что аргументы макроса не являются переменными и, следовательно, не могут использоваться в командах LIST.)

Примечание

При указании индексов, если <element index> равно 0 или больше, индексация ведётся с начала списка, где 0 соответствует первому элементу списка. Если <element index> равно -1 или меньше, индексация ведётся с конца списка, где -1 соответствует последнему элементу списка. Будьте внимательны при подсчёте с отрицательными индексами: они не начинаются с 0. -0 эквивалентно 0, первому элементу списка.

Чтение

list(LENGTH <list> <output variable>)

Возвращает длину списка.

list(GET <list> <element index> [<element index> ...] <output variable>)

Возвращает список элементов, заданных индексами из списка.

list(JOIN <list> <glue> <output variable>)

Возвращает строку, объединяющую все элементы списка с использованием разделительной строки. Для объединения нескольких строк, не являющихся частью списка, используйте оператор JOIN из команды string().

list(SUBLIST <list> <begin> <length> <output variable>)

Возвращает подсписок заданного списка. Если <length> равно 0, будет возвращён пустой список. Если <length> равно -1 или список меньше <begin>+<length>, будут возвращены оставшиеся элементы списка, начиная с <begin>.

Поиск

list(FIND <list> <value> <output variable>)

Возвращает индекс элемента, указанного в списке, или -1, если он не найден.

Изменение

list(APPEND <list> [<element> ...])

Добавляет элементы в список.

list(FILTER <list> <INCLUDE|EXCLUDE> REGEX <regular_expression>)

Включает или удаляет элементы из списка, соответствующие шаблону режима. В режиме REGEX элементы будут соответствовать заданному регулярному выражению.

Для получения дополнительной информации о регулярных выражениях см. также команду string().

list(INSERT <list> <element_index> <element> [<element> ...])

Вставляет элементы в список в указанное место.

list(POP_BACK <list> [<out-var>...])

Если имя переменной не указано, удаляется ровно один элемент. В противном случае, значение последнего элемента присваивается заданной переменной и удаляется, до последнего указанного имени переменной.

list(POP_FRONT <list> [<out-var>...])

Если имя переменной не указано, удаляется ровно один элемент. В противном случае, значение первого элемента присваивается заданной переменной и удаляется, до последнего указанного имени переменной.

list(PREPEND <list> [<element> ...])

Вставляет элементы в 0-ю позицию списка.

list(REMOVE_ITEM <list> <value> [<value> ...])

Удаляет все вхождения заданных элементов из списка.

list(REMOVE_AT <list> <index> [<index> ...])

Удаляет элементы в заданных индексах из списка.

list(REMOVE_DUPLICATES <list>)

Удаляет повторяющиеся элементы в списке. Относительный порядок элементов сохраняется, но если повторяющиеся элементы встречаются, сохраняется только первое вхождение.

list(TRANSFORM <list> <ACTION> [<SELECTOR>]
                      [OUTPUT_VARIABLE <output variable>])

Преобразует список, применяя действие ко всем или, указав <SELECTOR>, к выбранным элементам списка, сохраняя результат на месте или в указанной выходной переменной.

Примечание

Подкоманда TRANSFORM не изменяет количество элементов в списке. Если указан <SELECTOR>, только некоторые элементы будут изменены, остальные останутся прежними, как до преобразования.

<ACTION> определяет действие, которое будет применено к элементам списка. Действия имеют точно такие же семантику, как подкоманды команды string(). <ACTION> должно быть одним из следующих:

APPEND, PREPEND: Добавление, вставка указанного значения в каждый элемент списка.

list(TRANSFORM <list> <APPEND|PREPEND> <value> ...)

TOUPPER, TOLOWER: Преобразование каждого элемента списка в верхний, нижний регистр.

list(TRANSFORM <list> <TOLOWER|TOUPPER> ...)

STRIP: Удаление начальных и конечных пробелов из каждого элемента списка.

list(TRANSFORM <list> STRIP ...)

GENEX_STRIP: Удаление любых generator expressions из каждого элемента списка.

list(TRANSFORM <list> GENEX_STRIP ...)

REPLACE: Сопоставление регулярного выражения как можно большее количество раз и подстановка выражения замены для соответствия для каждого элемента списка (такая же семантика, как REGEX REPLACE из команды string()).

list(TRANSFORM <list> REPLACE <regular_expression>
                              <replace_expression> ...)

<SELECTOR> определяет, какие элементы списка будут преобразованы. Одновременно можно указать только один тип селектора. При указании <SELECTOR> должно быть одним из следующих:

AT: Указание списка индексов.

list(TRANSFORM <list> <ACTION> AT <index> [<index> ...] ...)

FOR: Указание диапазона с, необязательно, шагом для итерации по диапазону.

list(TRANSFORM <list> <ACTION> FOR <start> <stop> [<step>] ...)

REGEX: Указание регулярного выражения. Будут преобразованы только элементы, соответствующие регулярному выражению.

list(TRANSFORM <list> <ACTION> REGEX <regular_expression> ...)

Сортировка

list(REVERSE <list>)

Инвертирует содержимое списка на месте.

list(SORT <list> [COMPARE <compare>] [CASE <case>] [ORDER <order>])

Сортирует список на месте в алфавитном порядке. Используйте ключевое слово COMPARE для выбора метода сравнения для сортировки. Опция <compare> должна быть одной из:

  • STRING: Сортирует список строк в алфавитном порядке. Это поведение по умолчанию, если опция COMPARE не задана.
  • FILE_BASENAME: Сортирует список путей к файлам по их базавым именам.

Используйте ключевое слово CASE для выбора чувствительной или нечувствительной к регистру сортировки. Опция <case> должна быть одной из:

  • SENSITIVE: Элементы списка сортируются чувствительным к регистру способом. Это поведение по умолчанию, если опция CASE не задана.
  • INSENSITIVE: Элементы списка сортируются нечувствительным к регистру способом. Порядок элементов, отличающихся только регистром, не определён.

Для управления порядком сортировки можно использовать ключевое слово ORDER. Опция <order> должна быть одной из:

  • ASCENDING: Сортирует список в порядке возрастания. Это поведение по умолчанию, когда опция ORDER не задана.
  • DESCENDING: Сортирует список в порядке убывания.

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

Spec-Zone.ru

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