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