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