Spec-Zone.ru › CMake 3.29

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/v3.29/command/list.html

Spec-Zone.ru

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