Spec-Zone.ru › CMake

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

Spec-Zone.ru

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