Spec-Zone.ru › CMake 3.20

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> может содержать следующие спецификаторы формата:

%%        A literal percent sign (%).
%d        The day of the current month (01-31).
%H        The hour on a 24-hour clock (00-23).
%I        The hour on a 12-hour clock (01-12).
%j        The day of the current year (001-366).
%m        The month of the current year (01-12).
%b        Abbreviated month name (e.g. Oct).
%B        Full month name (e.g. October).
%M        The minute of the current hour (00-59).
%s        Seconds since midnight (UTC) 1-Jan-1970 (UNIX time).
%S        The second of the current minute.
          60 represents a leap second. (00-60)
%U        The week number of the current year (00-53).
%w        The day of the current week. 0 is Sunday. (0-6)
%a        Abbreviated weekday name (e.g. Fri).
%A        Full weekday name (e.g. Friday).
%y        The last two digits of the current year (00-99)
%Y        The current year.

Добавлено в версии 3.6: %s спецификатор формата (время в формате Unix).

Добавлено в версии 3.7: %a и %b спецификаторы формата (сокращённые названия месяцев и дней недели).

Добавлено в версии 3.8: %% спецификатор (литеральный %).

Добавлено в версии 3.7: %A и %B спецификаторы формата (полные названия месяцев и дней недели).

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

Если явное значение <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> [<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.20/command/string.html

Spec-Zone.ru

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