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.
Вставка элементов в позицию 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.
Преобразует список, применяя действие ко всем или, при указании <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.23/command/list.html