Spec-Zone.ru › CMake 3.22

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>)

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

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

Хеширование

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

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

MD5

Алгоритм дайджеста сообщений 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)

%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.

Создайте универсальный уникальный идентификатор (UUID) согласно 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> [<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–2021 Kitware, Inc. and Contributors
Licensed under the BSD 3-clause License.
https://cmake.org/cmake/help/v3.22/command/string.html

Spec-Zone.ru

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