Spec-Zone.ru › CMake 3.16

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 <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(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> ...)

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

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

Добавляет все аргументы <input> к строке.

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

Добавляет все аргументы <input> в начало строки.

string(CONCAT <output_variable> [<input>...])

Конкатенирует все аргументы <input> вместе и сохраняет результат в именованную переменную <output_variable>.

string(JOIN <glue> <output_variable> [<input>...])

Объединяет все аргументы <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>. Если <string> короче <length>, используется конец строки.

И <begin>, и <length> считаются в байтах, поэтому необходимо проявлять осторожность, если <string> может содержать многобайтовые символы.

Примечание

CMake 3.1 и ниже сообщали об ошибке, если <length> указывал на позицию за пределами <string>.

string(STRIP <string> <output_variable>)

Хранит в <output_variable> подстроку заданной <string>, удалив ведущие и хвостовые пробелы.

string(GENEX_STRIP <string> <output_variable>)

Удаляет любые generator expressions из входных данных <string> и сохраняет результат в <output_variable>.

string(REPEAT <string> <count> <output_variable>)

Выводит строку результата, как входное значение <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>.

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

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.

Генерация

string(ASCII <number> [<number> ...] <output_variable>)

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

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> может содержать следующие спецификаторы формата:

%%        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.16/command/string.html

Spec-Zone.ru

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