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