Spec-Zone.ru › CMake 3.17

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

Алгоритм хеширования сообщений 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.

Генерация

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 запрашивает представление текущей даты/времени в формате Coordinated Universal Time (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.17/command/string.html

Spec-Zone.ru

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