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>)
string(REGEX QUOTE <out-var> <input>...)
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 | GET_RAW | TYPE | LENGTH}
<json-string> [<member|index> ...])
string(JSON <out-var> [ERROR_VARIABLE <error-var>]
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(JSON <out-var> [ERROR_VARIABLE <error-var>]
PARTIAL_EQUAL <json-string1> <json-string2>)
string(JSON <out-var> [ERROR_VARIABLE <error-var>]
STRING_ENCODE <string>) Поиск и замена
Поиск и замена обычными строками
-
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), чтобы одна обратная косая черта прошла обработку аргументов.
Изменено в версии 4.1: Теперь якорь ^ соответствует только началу входной строки, а не началу каждого повторного поиска. См. политику CMP0186.
В MATCHALL и REPLACE допускаются совпадения нулевой длины. Ранее они приводили к ошибке.
Выражение замены может содержать ссылки на подвыражения, которым ничего не соответствует. Ранее такие ссылки приводили к ошибке.
Описание регулярных выражений
Следующие символы имеют специальное значение в регулярных выражениях:
-
^ -
Соответствует началу входной строки
-
$ -
Соответствует концу входной строки
-
. -
Соответствует любому одиночному символу
-
\<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(REGEX QUOTE <out-var> <input>...) -
Добавлено в версии 4.2.
Сохраняет в
<out-var>регулярное выражение, соответствующее<input>. Все символы, имеющие специальное значение в регулярном выражении, экранируются, чтобы выходную строку можно было использовать как часть регулярного выражения для буквального сопоставления с входной строкой.
Сравнение
-
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 -
Алгоритм формирования дайджеста сообщения 5, RFC 1321.
-
SHA1 -
Алгоритм безопасного хеширования США 1, RFC 3174.
-
SHA224 -
Алгоритмы безопасного хеширования США, RFC 4634.
-
SHA256 -
Алгоритмы безопасного хеширования США, RFC 4634.
-
SHA384 -
Алгоритмы безопасного хеширования США, RFC 4634.
-
SHA512 -
Алгоритмы безопасного хеширования США, 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указывает, что представление текущих даты и времени должно быть задано по всемирному координированному времени (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для местного времени. -
%Y-%m-%dT%H:%M:%SZдля 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.
В следующих подкомандах аргумент <json-string> следует указывать как аргумент в кавычках, чтобы вся строка JSON передавалась как один аргумент, даже если она содержит точки с запятой.
-
string(JSON <out-var> [ERROR_VARIABLE <error-variable>] GET <json-string> [<member|index> ...]) -
Получает элемент из
<json-string>в месте, заданном списком аргументов<member|index>. Элементы массивов и объектов возвращаются в виде строки JSON. Булевы элементы возвращаются какONилиOFF. Элементы null возвращаются как пустая строка. Числовые и строковые типы возвращаются в виде строк.
-
string(JSON <out-var> [ERROR_VARIABLE <error-variable>] GET_RAW <json-string> [<member|index> ...]) -
Добавлено в версии 4.3.
Получает элемент из
<json-string>в месте, заданном списком аргументов<member|index>. АналогичноGET, но не преобразует числовые, строковые, булевы элементы и элементы null.
-
string(JSON <out-var> [ERROR_VARIABLE <error-variable>] TYPE <json-string> [<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 в противном случае.
-
string(JSON <out-var> [ERROR_VARIABLE <error-var>] PARTIAL_EQUAL <json-pattern> <json-actual>) -
Добавлено в версии 4.4.
Сравнивает два значения JSON на основе частичного равенства. Первый аргумент (
<json-pattern>) рассматривается как шаблон для сопоставления со вторым аргументом (<json-actual>), который рассматривается как полное значение JSON. Содержимое<json-pattern>и<json-actual>должно быть допустимым JSON.Для
<out-var>устанавливается значение true, если<json-pattern>содержится в<json-actual>согласно приведённым ниже правилам, и false в противном случае.Частичное равенство не является симметричным. В общем случае
PARTIAL_EQUAL(A, B)иPARTIAL_EQUAL(B, A)могут давать разные результаты.Правила сопоставления:
- Скалярные значения (null, число, строка, булево значение) должны совпадать точно.
-
Объекты совпадают, если каждый член
<json-pattern>существует в<json-actual>и соответствующие значения также рекурсивно совпадают. Дополнительные члены в<json-actual>игнорируются. -
Массивы совпадают, если каждый элемент
<json-pattern>рекурсивно совпадает с отдельным элементом<json-actual>. После успешного сопоставления элемента<json-actual>с элементом<json-pattern>этот элемент считается использованным и не может повторно использоваться для сопоставления с последующими элементами. Порядок элементов массива не имеет значения. Дополнительные элементы в<json-actual>игнорируются.
Значения разных типов не совпадают (например, объект не совпадает с массивом, а строка — с числом).
-
string(JSON <out-var> [ERROR_VARIABLE <error-var>] STRING_ENCODE <string>) -
Добавлено в версии 4.3.
Преобразует обычную строку в строку JSON, заключённую в кавычки. Специальные символы внутри строки JSON экранируются надлежащим образом.
© 2000–2026 Kitware, Inc. and Contributors
Licensed under the BSD 3-clause License.
https://cmake.org/cmake/help/latest/command/string.html