Spec-Zone.ru › CMake 3.31

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

Сохраняет подстроку заданной <string> в <output_variable>. Если <length> равно -1, возвращается остаток строки, начиная с <begin>.

Изменено в версии 3.2: Если <string> короче <length>, используется конец строки вместо этого. В предыдущих версиях CMake в этом случае сообщалось об ошибке.

И <begin>, и <length> подсчитываются в байтах, поэтому необходимо быть осторожным, если <string> может содержать многобайтовые символы.

string(STRIP <string> <output_variable>)

Сохраняет подстроку заданной <string> в <output_variable> с удаленными начальными и конечными пробелами.

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.

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

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

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> будет установлено в значение true, если JSON-объекты считаются равными, или в значение false в противном случае.

© 2000–2024 Kitware, Inc. and Contributors
Licensed under the BSD 3-clause License.
https://cmake.org/cmake/help/v3.31/command/string.html

Spec-Zone.ru

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