Spec-Zone.ru › CMake 3.24

string

Строковые операции.

Синтаксис

Search and Replace
  string(FIND <string> <substring> <out-var> [...])
  string(REPLACE <match-string> <replace-string> <out-var> <input>...)
  string(REGEX MATCH <match-regex> <out-var> <input>...)
  string(REGEX MATCHALL <match-regex> <out-var> <input>...)
  string(REGEX REPLACE <match-regex> <replace-expr> <out-var> <input>...)

Manipulation
  string(APPEND <string-var> [<input>...])
  string(PREPEND <string-var> [<input>...])
  string(CONCAT <out-var> [<input>...])
  string(JOIN <glue> <out-var> [<input>...])
  string(TOLOWER <string> <out-var>)
  string(TOUPPER <string> <out-var>)
  string(LENGTH <string> <out-var>)
  string(SUBSTRING <string> <begin> <length> <out-var>)
  string(STRIP <string> <out-var>)
  string(GENEX_STRIP <string> <out-var>)
  string(REPEAT <string> <count> <out-var>)

Comparison
  string(COMPARE <op> <string1> <string2> <out-var>)

Hashing
  string(<HASH> <out-var> <input>)

Generation
  string(ASCII <number>... <out-var>)
  string(HEX <string> <out-var>)
  string(CONFIGURE <string> <out-var> [...])
  string(MAKE_C_IDENTIFIER <string> <out-var>)
  string(RANDOM [<option>...] <out-var>)
  string(TIMESTAMP <out-var> [<format string>] [UTC])
  string(UUID <out-var> ...)

JSON
  string(JSON <out-var> [ERROR_VARIABLE <error-var>]
         {GET | TYPE | LENGTH | REMOVE}
         <json-string> <member|index> [<member|index> ...])
  string(JSON <out-var> [ERROR_VARIABLE <error-var>]
         MEMBER <json-string>
         [<member|index> ...] <index>)
  string(JSON <out-var> [ERROR_VARIABLE <error-var>]
         SET <json-string>
         <member|index> [<member|index> ...] <value>)
  string(JSON <out-var> [ERROR_VARIABLE <error-var>]
         EQUAL <json-string1> <json-string2>)

Поиск и замена

Поиск и замена с помощью обычных строк

string(FIND <string> <substring> <output_variable> [REVERSE])

Возвращает позицию, где указанная <substring> найдена в предоставленной <string>. Если был использован флаг REVERSE, команда будет искать позицию последнего вхождения указанной <substring>. Если <substring> не найдена, возвращается значение -1.

Подкоманда string(FIND) обрабатывает все строки как содержащие только символы ASCII. Индекс, хранящийся в <output_variable> , также будет учитываться в байтах, поэтому строки, содержащие многобайтовые символы, могут привести к неожиданным результатам.

string(REPLACE <match_string>
       <replace_string> <output_variable>
       <input> [<input>...])

Заменяет все вхождения <match_string> в <input> на <replace_string> и сохраняет результат в <output_variable>.

Поиск и замена с использованием регулярных выражений

string(REGEX MATCH <regular_expression>
       <output_variable> <input> [<input>...])

Сопоставляет <regular_expression> один раз и сохраняет совпадение в <output_variable>. Все аргументы <input> конкатенируются перед сопоставлением. Регулярные выражения указаны в подразделе ниже.

string(REGEX MATCHALL <regular_expression>
       <output_variable> <input> [<input>...])

Сопоставляет <regular_expression> как можно больше раз и сохраняет совпадения в <output_variable> в виде списка. Все аргументы <input> конкатенируются перед сопоставлением.

string(REGEX REPLACE <regular_expression>
       <replacement_expression> <output_variable>
       <input> [<input>...])

Сопоставляет <regular_expression> как можно больше раз и заменяет совпадение на <replacement_expression> в выводе. Все аргументы <input> конкатенируются перед сопоставлением.

<replacement_expression> может ссылаться на подвыражения, ограниченные скобками, совпадения с помощью \1, \2, ..., \9. Обратите внимание, что в коде CMake для получения обратной косой черты через обработку аргументов требуется две обратные косые черты (\\1).

Спецификация регулярных выражений

Следующие символы имеют специальное значение в регулярных выражениях:

^

Сопоставляет начало входных данных

$

Сопоставляет конец входных данных

.

Сопоставляет любой одиночный символ

\<char>

Сопоставляет одиночный символ, указанный в <char>. Используйте это для сопоставления специальных символов регулярных выражений, например \. для символа . или \\ для обратной косой черты \. Экранирование неспециального символа не является необходимым, но разрешено, например, \a соответствует a.

[ ]

Сопоставляет любой символ(ы) внутри скобок

[^ ]

Сопоставляет любой символ(ы), не находящийся внутри скобок

-

Внутри скобок задает интервал включения между символами с обеих сторон, например, [a-f] - [abcdef] Для сопоставления символа - используйте скобки, сделайте его первым или последним символом, например, [+*/-] сопоставляет базовые математические операторы.

*

Сопоставляет предшествующий шаблон ноль или более раз

+

Сопоставляет предшествующий шаблон один или более раз

?

Сопоставляет предшествующий шаблон ноль или один раз

|

Сопоставляет шаблон с обеих сторон |

()

Сохраняет совпавшее подвыражение, которое можно использовать в операции REGEX REPLACE.

Добавлено в версии 3.9: Все команды, связанные с регулярными выражениями, включая, например, if(MATCHES), сохраняют совпадения подгрупп в переменных CMAKE_MATCH_<n> для <n> 0..9.

*, + и ? имеют более высокий приоритет, чем конкатенация. | имеет более низкий приоритет, чем конкатенация. Это означает, что регулярное выражение ^ab+d$ сопоставляет abbd, но не ababd, и регулярное выражение ^(ab|cd)$ сопоставляет ab, но не abd.

Язык CMake Последовательности экранирования, такие как \t, \r, \n, и \\ могут быть использованы для создания литеральных табуляций, возвратов каретки, новых строк и обратных косых черт (соответственно) для передачи в регулярное выражение. Например:

  • Цитата аргумента "[ \t\r\n]" задает регулярное выражение, которое сопоставляет любой одиночный пробельный символ.
  • Цитата аргумента "[/\\]" задает регулярное выражение, которое сопоставляет одиночный прямой слэш / или обратную косую черту \.
  • Цитата аргумента "[A-Za-z0-9_]" задает регулярное выражение, которое сопоставляет любой одиночный символ "слова" в локали C.
  • Цитата аргумента "\\(\\a\\+b\\)" задает регулярное выражение, которое сопоставляет точную строку (a+b). Каждый \\ парсится в цитате аргумента как только \, поэтому само регулярное выражение фактически \(\a\+\b\). Это можно альтернативно указать в Аргумент в квадратных скобках без необходимости экранирования обратных косых черт, например [[\(\a\+\b\)]].

Манипуляции

string(APPEND <string_variable> [<input>...])

Добавлено в версии 3.4.

Добавляет все аргументы <input> к строке.

string(PREPEND <string_variable> [<input>...])

Добавлено в версии 3.10.

Добавляет все аргументы <input> в начало строки.

string(CONCAT <output_variable> [<input>...])

Конкатенирует все аргументы <input> вместе и сохраняет результат в именованной <output_variable>.

string(JOIN <glue> <output_variable> [<input>...])

Добавлено в версии 3.12.

Объединяет все аргументы <input> вместе с использованием строки <glue> и сохраняет результат в именованной <output_variable>.

Для объединения элементов списка предпочтительнее использовать оператор JOIN из команды list(). Это позволяет элементам иметь специальные символы, такие как ;.

string(TOLOWER <string> <output_variable>)

Преобразует <string> в строчные символы.

string(TOUPPER <string> <output_variable>)

Преобразует <string> в заглавные символы.

string(LENGTH <string> <output_variable>)

Хранит в <output_variable> длину заданной строки в байтах. Обратите внимание, что это означает, что если <string> содержит многобайтовые символы, результат, хранящийся в <output_variable> , не будет количеством символов.

string(SUBSTRING <string> <begin> <length> <output_variable>)

Хранит в <output_variable> подстроку заданной <string> . Если <length> равно -1, то остаток строки, начиная с <begin>, будет возвращён.

Изменено в версии 3.2: Если <string> короче, чем <length> , то используется конец строки. Предыдущие версии CMake в этом случае сообщали об ошибке.

И <begin> , и <length> считаются в байтах, поэтому необходимо быть осторожным, если <string> может содержать многобайтовые символы.

string(STRIP <string> <output_variable>)

Хранит в <output_variable> подстроку заданной <string> с удаленными начальными и конечными пробелами.

string(GENEX_STRIP <string> <output_variable>)

Добавлено в версии 3.1.

Удаляет любые generator expressions из входных данных <string> и сохраняет результат в <output_variable>.

string(REPEAT <string> <count> <output_variable>)

Добавлено в версии 3.15.

Выводит строку как входные данные <string> , повторяемые <count> раз.

Сравнение

string(COMPARE LESS <string1> <string2> <output_variable>)
string(COMPARE GREATER <string1> <string2> <output_variable>)
string(COMPARE EQUAL <string1> <string2> <output_variable>)
string(COMPARE NOTEQUAL <string1> <string2> <output_variable>)
string(COMPARE LESS_EQUAL <string1> <string2> <output_variable>)
string(COMPARE GREATER_EQUAL <string1> <string2> <output_variable>)

Сравнивает строки и сохраняет истинное или ложное значение в <output_variable>.

Добавлено в версии 3.7: Добавлены опции LESS_EQUAL и GREATER_EQUAL.

Хеширование

string(<HASH> <output_variable> <input>)

Вычисляет криптографический хеш строки <input> . Поддерживаемые алгоритмы хеширования называются:

MD5

Алгоритм Message-Digest 5, RFC 1321.

SHA1

Алгоритм хэширования 1 США, RFC 3174.

SHA224

Алгоритмы хэширования США, RFC 4634.

SHA256

Алгоритмы хэширования США, RFC 4634.

SHA384

Алгоритмы хэширования США, RFC 4634.

SHA512

Алгоритмы хэширования США, RFC 4634.

SHA3_224

Keccak SHA-3.

SHA3_256

Keccak SHA-3.

SHA3_384

Keccak SHA-3.

SHA3_512

Keccak SHA-3.

Добавлено в версии 3.8: Добавлено SHA3_* алгоритмов хеширования.

Генерация

string(ASCII <number> [<number> ...] <output_variable>)

Преобразует все числа в соответствующие символы ASCII.

string(HEX <string> <output_variable>)

Добавлено в версии 3.18.

Преобразует каждый байт во входных данных <string> в его шестнадцатеричное представление и сохраняет конкатенированные шестнадцатеричные цифры в <output_variable> . Буквы в выводе (от a до f) в нижнем регистре.

string(CONFIGURE <string> <output_variable>
       [@ONLY] [ESCAPE_QUOTES])

Преобразуйте <string> как configure_file() преобразует файл.

string(MAKE_C_IDENTIFIER <string> <output_variable>)

Преобразуйте каждый небуквенно-цифровой символ в входном <string> в нижнее подчеркивание и сохраните результат в <output_variable>. Если первый символ <string> — цифра, в результат также будет добавлен символ нижнего подчеркивания перед ним.

string(RANDOM [LENGTH <length>] [ALPHABET <alphabet>]
       [RANDOM_SEED <seed>] <output_variable>)

Возвращает случайную строку заданной <length> длины, состоящую из символов из заданного <alphabet>. По умолчанию длина — 5 символов, а алфавит — все цифры и прописные и строчные буквы. Если задано целое число RANDOM_SEED, его значение будет использовано для инициализации генератора случайных чисел.

string(TIMESTAMP <output_variable> [<format_string>] [UTC])

Запишите строковое представление текущей даты и/или времени в <output_variable>.

Если команда не может получить метку времени, <output_variable> будет установлено в пустую строку "".

Необязательный флаг UTC запрашивает представление текущей даты/времени в формате Coordinated Universal Time (UTC) вместо местного времени.

Необязательный <format_string> может содержать следующие спецификаторы формата:

%%

Новое в версии 3.8.

Буквальный символ процента (%).

%d

День текущего месяца (01-31).

%H

Часы по 24-часовому формату (00-23).

%I

Часы по 12-часовому формату (01-12).

%j

День текущего года (001-366).

%m

Месяц текущего года (01-12).

%b

Новое в версии 3.7.

Сокращенное имя месяца (например, Окт).

%B

Новое в версии 3.10.

Полное имя месяца (например, Октябрь).

%M

Минута текущего часа (00-59).

%s

Новое в версии 3.6.

Секунды с полуночи (UTC) 1-го января 1970 (время Unix).

%S

Секунда текущей минуты. 60 обозначает високосную секунду. (00-60)

%f

Микросекунда текущей секунды (000000-999999).

%U

Номер недели текущего года (00-53).

%V

Новое в версии 3.22.

Номер недели текущего года по ISO 8601 (01-53).

%w

День текущей недели. 0 — воскресенье. (0-6)

%a

Новое в версии 3.7.

Сокращенное название дня недели (например, Пт).

%A

Новое в версии 3.10.

Полное название дня недели (например, Пятница).

%y

Последние две цифры текущего года (00-99).

%Y

Текущий год.

Неизвестные спецификаторы формата будут проигнорированы и скопированы в выходные данные как есть.

Если явное <format_string> не указано, оно будет по умолчанию:

%Y-%m-%dT%H:%M:%S    for local time.
%Y-%m-%dT%H:%M:%SZ   for UTC.

Новое в версии 3.8: Если переменная среды SOURCE_DATE_EPOCH задана, ее значение будет использовано вместо текущего времени. Подробности см. в https://reproducible-builds.org/specs/source-date-epoch/.

string(UUID <output_variable> NAMESPACE <namespace> NAME <name>
       TYPE <MD5|SHA1> [UPPER])

Новое в версии 3.1.

Создайте универсальный уникальный идентификатор (также известный как GUID) в соответствии со спецификацией RFC4122, основанный на хеше комбинированных значений <namespace> (которое само должно быть допустимым UUID) и <name>. Алгоритм хеширования может быть либо MD5 (UUID версии 3), либо SHA1 (UUID версии 5). UUID имеет формат xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx , где каждый x представляет собой строчную шестнадцатеричную цифру. При необходимости заглавная форма может быть запрошена с помощью необязательного флага UPPER.

JSON

Новое в версии 3.19.

Функциональность для запроса JSON-строки.

Примечание

В каждом из следующих подкоманд, связанных с JSON, если необязательный аргумент ERROR_VARIABLE задан, ошибки будут сообщены в <error-variable> , и <out-var> будет установлено в <member|index>-[<member|index>...]-NOTFOUND с элементами пути до точки возникновения ошибки или только NOTFOUND если соответствующего пути нет. Если ошибка произошла, но опция ERROR_VARIABLE не присутствует, генерируется сообщение об ошибке. Если ошибки не произошло, <error-variable> будет установлено в NOTFOUND.

string(JSON <out-var> [ERROR_VARIABLE <error-variable>]
       GET <json-string> <member|index> [<member|index> ...])

Получение элемента из <json-string> по заданному списку <member|index> аргументов. Элементы массивов и объектов будут возвращены как JSON-строки. Булевы элементы будут возвращены как ON или OFF. Нулевые элементы будут возвращены как пустая строка. Числа и строковые типы будут возвращены как строки.

string(JSON <out-var> [ERROR_VARIABLE <error-variable>]
       TYPE <json-string> <member|index> [<member|index> ...])

Получение типа элемента в <json-string> по заданному списку <member|index> аргументов. <out-var> будет установлено на одно из значений NULL, NUMBER, STRING, BOOLEAN, ARRAY или OBJECT.

string(JSON <out-var> [ERROR_VARIABLE <error-var>]
       MEMBER <json-string>
       [<member|index> ...] <index>)

Получение имени <index>-го члена в <json-string> по заданному списку <member|index> аргументов. Требуется элемент типа объект.

string(JSON <out-var> [ERROR_VARIABLE <error-variable>]
       LENGTH <json-string> [<member|index> ...])

Получение длины элемента в <json-string> по заданному списку <member|index> аргументов. Требуется элемент типа массив или объект.

string(JSON <out-var> [ERROR_VARIABLE <error-variable>]
       REMOVE <json-string> <member|index> [<member|index> ...])

Удаление элемента из <json-string> по заданному списку <member|index> аргументов. JSON-строка без удаленного элемента будет сохранена в <out-var>.

string(JSON <out-var> [ERROR_VARIABLE <error-variable>]
       SET <json-string> <member|index> [<member|index> ...] <value>)

Установка элемента в <json-string> по заданному списку <member|index> аргументов на значение <value>. Содержимое <value> должно быть корректной JSON-строкой.

string(JSON <out-var> [ERROR_VARIABLE <error-var>]
       EQUAL <json-string1> <json-string2>)

Сравнение двух JSON-объектов, заданных <json-string1> и <json-string2>, на равенство. Содержимое <json-string1> и <json-string2> должно быть корректными JSON-строками. <out-var> будет установлено в значение "истина", если JSON-объекты считаются равными, или в значение "ложь" в противном случае.

© 2000–2022 Kitware, Inc. and Contributors
Licensed under the BSD 3-clause License.
https://cmake.org/cmake/help/v3.24/command/string.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API