Spec-Zone.ru › CMake 3.29

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.

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

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

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

Spec-Zone.ru

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