Spec-Zone.ru › CMake 3.26

list

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

Синтаксис

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>)

Новая в версии 3.12.

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

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

Новая в версии 3.12.

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

Поиск

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

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

Модификация

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

Добавляет элементы в список. Если переменная с именем <list> не существует в текущей области видимости, её значение считается пустым, и элементы добавляются в этот пустой список.

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

Новая в версии 3.6.

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

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

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

Вставляет элементы в список в указанный индекс. Указание индекса вне диапазона является ошибкой. Допустимые индексы от 0 до N, где N — длина списка включительно. У пустого списка длина 0. Если переменная с именем <list> не существует в текущей области видимости, её значение считается пустым, и элементы вставляются в этот пустой список.

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

Новая в версии 3.15.

Если имя переменной не указано, удаляется ровно один элемент. В противном случае, с указанными именами переменных N, присваиваются значения последних N элементов заданным переменным, а затем удаляются последние N значения из <list>.

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

Новая в версии 3.15.

Если имя переменной не указано, удаляется ровно один элемент. В противном случае, с указанными именами переменных N, присваиваются значения первых N элементов заданным переменным, а затем удаляются первые N значения из <list>.

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

Новая в версии 3.15.

Вставляет элементы в начало списка. Если переменная с именем <list> не существует в текущей области видимости, её значение считается пустым, и элементы добавляются в начало этого пустого списка.

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>])

Новая в версии 3.12.

Преобразует список, применяя действие ко всем или, при указании <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>])

Сортирует список на месте в алфавитном порядке.

Новая в версии 3.13: Добавлены опции COMPARE, CASE, и ORDER.

Новая в версии 3.18: Добавлена опция COMPARE NATURAL.

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

  • STRING: Сортирует список строк в алфавитном порядке. Это поведение по умолчанию, если опция COMPARE не задана.
  • FILE_BASENAME: Сортирует список путей к файлам по их именам файлов.
  • NATURAL: Сортирует список строк с использованием естественного порядка (см. руководство strverscmp(3)), т. е. так, что смежные цифры сравниваются как целые числа. Например: следующий список 10.0 1.1 2.1 8.0 2.0 3.1 будет отсортирован как 1.1 2.0 2.1 3.1 8.0 10.0 при выборе сравнения NATURAL, тогда как он будет отсортирован как 1.1 10.0 2.0 2.1 3.1 8.0 при выборе сравнения STRING.

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

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

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

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

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

Spec-Zone.ru

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