list
Операции со списками.
Synopsis
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(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, 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>)
Возвращает строку, объединяющую все элементы списка с использованием соединительной строки. Чтобы объединить несколько строк, которые не являются частью списка, используйте оператор JOIN из команды string().
list(SUBLIST <list> <begin> <length> <output variable>)
Возвращает подсписок заданного списка. Если <length> равно 0, будет возвращен пустой список. Если <length> равно -1 или список меньше <begin>+<length>, будут возвращены оставшиеся элементы списка, начиная с <begin>.
Поиск
list(FIND <list> <value> <output variable>)
Возвращает индекс элемента, указанного в списке, или -1, если он не был найден.
Изменение
list(APPEND <list> [<element> ...])
Добавляет элементы в список.
list(FILTER <list> <INCLUDE|EXCLUDE> REGEX <regular_expression>)
Включает или удаляет элементы из списка, которые соответствуют шаблону режима. В режиме REGEX элементы будут сопоставляться с заданным регулярным выражением.
Для получения дополнительной информации о регулярных выражениях см. также команду string().
list(INSERT <list> <element_index> <element> [<element> ...])
Вставляет элементы в список в указанное местоположение.
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>])
Преобразует список, применяя действие ко всем или, указав <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>)
Сортирует список на месте в алфавитном порядке.
© 2000–2019 Kitware, Inc. and Contributors
Licensed under the BSD 3-clause License.
https://cmake.org/cmake/help/v3.12/command/list.html