Spec-Zone.ru › CMake 3.28

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>. Поддерживаемые алгоритмы хеширования:

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.

Полное название месяца (напр. October).

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

Сокращенное название дня недели (напр. Fri).

%A

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

Полное название дня недели (напр. Friday).

%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> аргументов пути. Требуется элемент типа массив или объект.

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

Spec-Zone.ru

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