Spec-Zone.ru › CMake 3.30

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.

[ ]

Сопоставляет любой символ(ы) внутри скобок. Для сопоставления литеральной ], сделайте ее первым символом, например, []ab].

[^ ]

Сопоставляет любой символ(ы), не находящийся внутри скобок. Чтобы не сопоставлять литеральную ], сделайте ее первым символом, например, [^]ab].

-

Внутри скобок, задает инклюзивный диапазон между символами с обеих сторон, например, [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

Алгоритм 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.

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

%B

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

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

%M

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

%s

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

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

%S

Секунда текущей минуты. 60 представляет високосную секунду. (00-60).

%f

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

Микросекунда текущей секунды (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

Текущий год.

%z

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

Смещение часового пояса от UTC в часах и минутах, в формате +hhmm или -hhmm.

%Z

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

Название часового пояса.

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

Если явных спецификаторов <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> ...])

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

END_OF_DOCUMENT_MARKER
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. Если <json-string> является массивом, <value> можно добавить в конец массива, используя в качестве <member|index> аргумента число, большее или равное длине массива.

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–2024 Kitware, Inc. and Contributors
Licensed under the BSD 3-clause License.
https://cmake.org/cmake/help/v3.30/command/string.html

Spec-Zone.ru

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