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