Spec-Zone.ru › CMake 3.23

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 Escape Sequences, такие как \t, \r, \n, и \\, могут быть использованы для построения литеральных табуляций, возвратных карет, новых строк и обратных косых черт (соответственно), чтобы передать их в регулярное выражение. Например:

  • Приведенный аргумент "[ \t\r\n]" определяет регулярное выражение, которое соответствует любому одиночному символу пробела.
  • Приведенный аргумент "[/\\]" определяет регулярное выражение, которое соответствует одиночному слешу / или обратной косой черте \.
  • Приведенный аргумент "[A-Za-z0-9_]" определяет регулярное выражение, которое соответствует любому одиночному символу «слова» в локале C.
  • Приведенный аргумент "\\(\\a\\+b\\)" определяет регулярное выражение, которое соответствует точной строке (a+b). Каждый \\ анализируется в кавычатом аргументе как просто \, поэтому само регулярное выражение фактически равно \(\a\+\b\). Это можно альтернативно указать в Bracket Argument без необходимости экранировать обратные косые черты, например, [[\(\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>. Поддерживаемые имена алгоритмов хеширования <HASH>:

MD5

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

SHA1

Алгоритм US Secure Hash 1, RFC 3174.

SHA224

Алгоритмы US Secure Hash, RFC 4634.

SHA256

Алгоритмы US Secure Hash, RFC 4634.

SHA384

Алгоритмы US Secure Hash, RFC 4634.

SHA512

Алгоритмы US Secure Hash, 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.

Сокращённое название месяца (напр., Oct).

%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.23/command/string.html

Spec-Zone.ru

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