Spec-Zone.ru › CMake

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.

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

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.

Вставляет элементы в 0-ую позицию в списке. Если переменная с именем <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.

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

Примечание

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

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

APPEND, PREPEND

Добавляет, добавляет в начало указанное значение к каждому элементу списка.

list(TRANSFORM <list> (APPEND|PREPEND) <value> ...)
TOLOWER, TOUPPER

Преобразует каждый элемент списка в строчные или прописные буквы.

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

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

list(TRANSFORM <list> STRIP ...)
GENEX_STRIP

Удаляет все generator expressions из каждого элемента списка.

list(TRANSFORM <list> GENEX_STRIP ...)
REPLACE:

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

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

Spec-Zone.ru

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