Spec-Zone.ru › CMake 3.31

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

Spec-Zone.ru

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