Spec-Zone.ru › CMake 3.27

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.

Вставляет элементы в начало списка. Если переменная с именем <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.27/command/list.html

Spec-Zone.ru

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