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>) -
Сохраняет в
<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.
Создать универсальный уникальный идентификатор (также известный как 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. Если<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/latest/command/string.html