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