Spec-Zone.ru › CMake 3.15

string

Операции со строками.

Синопсис

Search and Replace
  string(FIND <string> <substring> <out-var> [...])
  string(REPLACE <match-string> <replace-string> <out-var> <input>...)

Regular Expressions
  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 <string1> <out-var>)
  string(TOUPPER <string1> <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(CONFIGURE <string1> <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> ...)

Поиск и замена

string(FIND <string> <substring> <output variable> [REVERSE])

Возвращает позицию, где заданная подстрока найдена в указанной строке. Если используется флаг REVERSE, команда будет искать позицию последнего вхождения указанной подстроки. Если подстрока не найдена, возвращается позиция -1.

string(REPLACE <match_string>
       <replace_string> <output variable>
       <input> [<input>...])

Заменяет все вхождения match_string во входных данных на replace_string и сохраняет результат в выходе.

Регулярные выражения

string(REGEX MATCH <regular_expression>
       <output variable> <input> [<input>...])

Сопоставляет регулярное выражение один раз и сохраняет совпадение в переменной вывода. Все аргументы <input> конкатенируются перед сопоставлением.

string(REGEX MATCHALL <regular_expression>
       <output variable> <input> [<input>...])

Сопоставляет регулярное выражение как можно большее количество раз и сохраняет совпадения в переменной вывода в виде списка. Все аргументы <input> конкатенируются перед сопоставлением.

string(REGEX REPLACE <regular_expression>
       <replace_expression> <output variable>
       <input> [<input>...])

Сопоставляет регулярное выражение как можно большее количество раз и заменяет выражение замены для совпадения в выводе. Все аргументы <input> конкатенируются перед сопоставлением.

Выражение замены может ссылаться на суbexpressions совпадения, ограниченные скобками, используя \1, \2, …, \9. Обратите внимание, что для получения обратной косой черты через обработку аргументов в коде CMake требуются две обратные косые черты (\\1).

Спецификация регулярных выражений

Следующие символы имеют специальное значение в регулярных выражениях:

^

Сопоставляет начало входных данных

$

Сопоставляет конец входных данных

.

Сопоставляет любой одиночный символ

\<char>

Сопоставляет одиночный символ, указанный в <char>. Используйте это для сопоставления специальных символов регулярных выражений, например, \. для литеральной . или \\ для литеральной обратной косой черты \. Экранирование неспециального символа не требуется, но разрешено, например, \a соответствует a.

[ ]

Сопоставляет любой символ(ы) внутри скобок

[^ ]

Сопоставляет любой символ(ы), не находящийся внутри скобок

-

Внутри скобок задаёт диапазон между символами по обе стороны от него, например, [a-f] это [abcdef]. Чтобы сопоставить литеральную - с помощью скобок, сделайте её первым или последним символом, например, [+*/-] соответствует основным математическим операторам.

*

Сопоставляет предшествующий шаблон ноль или более раз

+

Сопоставляет предшествующий шаблон один или более раз

?

Сопоставляет предшествующий шаблон ноль или один раз

|

Сопоставляет шаблон по обе стороны от |

()

Сохраняет совпавший субекспрессион, который можно использовать в операции REGEX REPLACE. Кроме того, он сохраняется всеми командами, связанными с регулярными выражениями, включая, например, 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>...])

Добавляет все входные аргументы к строке.

string(PREPEND <string variable> [<input>...])

Предваряет все входные аргументы строкой.

string(CONCAT <output variable> [<input>...])

Конкатенирует все входные аргументы вместе и сохраняет результат в указанной переменной вывода.

string(JOIN <glue> <output variable> [<input>...])

Объединяет все входные аргументы вместе с использованием строки склейки и сохраняет результат в указанной переменной вывода.

Для объединения элементов списка, используйте предпочтительно оператор JOIN из команды list(). Это позволяет элементам иметь специальные символы, такие как ; в них.

string(TOLOWER <string1> <output variable>)

Преобразует строку в символы нижнего регистра.

string(TOUPPER <string1> <output variable>)

Преобразует строку в символы верхнего регистра.

string(LENGTH <string> <output variable>)

Сохраняет в переменной вывода длину заданной строки.

string(SUBSTRING <string> <begin> <length> <output variable>)

Сохраняет в переменной вывода подстроку заданной строки. Если длина является -1, возвращается остаток строки, начиная с начала. Если строка короче длины, вместо этого используется конец строки.

Примечание

CMake 3.1 и ниже сообщали об ошибке, если длина указывала за пределами строки.

string(STRIP <string> <output variable>)

Сохраняет в переменной вывода подстроку заданной строки с удалением ведущих и хвостовых пробелов.

string(GENEX_STRIP <input string> <output variable>)

Удаляет все generator expressions из input string и сохраняет результат в output variable.

string(REPEAT <input string> <count> <output variable>)

Выводит строку вывода как повторение input 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 в переменной вывода.

Поддерживаемые алгоритмы хеширования

string(<HASH> <output variable> <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.

Генерация

string(ASCII <number> [<number> ...] <output variable>)

Преобразует все числа в соответствующие символы ASCII.

string(CONFIGURE <string1> <output variable>
       [@ONLY] [ESCAPE_QUOTES])

Преобразует строку, подобную configure_file(), как преобразует файл.

string(MAKE_C_IDENTIFIER <input string> <output variable>)

Преобразует каждый не буквенно-цифровой символ в строке <input string> в символ подчёркивания и сохраняет результат в переменной <output variable> Если первый символ строки является цифрой, символ подчёркивания также будет добавлен перед результатом.

string(RANDOM [LENGTH <length>] [ALPHABET <alphabet>]
       [RANDOM_SEED <seed>] <output variable>)

Возвращает случайную строку заданной длины, состоящую из символов из заданного алфавита. По умолчанию длина составляет 5 символов, а по умолчанию алфавит включает все цифры и заглавные и строчные буквы. Если целое число RANDOM_SEED задано, его значение будет использоваться для инициализации генератора случайных чисел.

string(TIMESTAMP <output variable> [<format string>] [UTC])

Записывает строковое представление текущей даты и/или времени в переменную вывода.

Если команда не сможет получить метку времени, переменная вывода будет установлена в пустую строку “”.

Необязательный флаг UTC запрашивает представление текущей даты/времени в координированном универсальном времени (UTC) вместо местного времени.

Необязательный <format string> может содержать следующие спецификаторы формата:

%%        A literal percent sign (%).
%d        The day of the current month (01-31).
%H        The hour on a 24-hour clock (00-23).
%I        The hour on a 12-hour clock (01-12).
%j        The day of the current year (001-366).
%m        The month of the current year (01-12).
%b        Abbreviated month name (e.g. Oct).
%B        Full month name (e.g. October).
%M        The minute of the current hour (00-59).
%s        Seconds since midnight (UTC) 1-Jan-1970 (UNIX time).
%S        The second of the current minute.
          60 represents a leap second. (00-60)
%U        The week number of the current year (00-53).
%w        The day of the current week. 0 is Sunday. (0-6)
%a        Abbreviated weekday name (e.g. Fri).
%A        Full weekday name (e.g. Friday).
%y        The last two digits of the current year (00-99)
%Y        The current year.

Неизвестные спецификаторы формата будут проигнорированы и скопированы в вывод как есть.

Если явным образом не указан <format string>, он будет по умолчанию:

%Y-%m-%dT%H:%M:%S    for local time.
%Y-%m-%dT%H:%M:%SZ   for UTC.

Примечание

Если переменная окружения SOURCE_DATE_EPOCH установлена, её значение будет использоваться вместо текущего времени. См. https://reproducible-builds.org/specs/source-date-epoch/ для получения дополнительных сведений.

string(UUID <output variable> NAMESPACE <namespace> NAME <name>
       TYPE <MD5|SHA1> [UPPER])

Создаёт универсально уникальный идентификатор (также известный как GUID) в соответствии с RFC4122 на основе хеша объединённых значений <namespace> (само по себе являющееся допустимым UUID) и <name>. Алгоритм хеширования может быть либо MD5 (UUID версии 3) или SHA1 (UUID версии 5). UUID имеет формат xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx, где каждый x представляет строчный шестнадцатеричный символ. Если необходимо, заглавное представление может быть запрошено с помощью необязательного флага UPPER.

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

Spec-Zone.ru

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