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