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>) 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> аргументы конкатенируются перед сопоставлением.
Выражение замены может ссылаться на заключенные в скобки подвыражения совпадения, используя \1, \2, …, \9. Обратите внимание, что для получения обратной косой черты через обработку аргументов в коде CMake требуется две обратные косые черты (\\1).
Спецификация регулярных выражений
В регулярных выражениях следующие символы имеют специальное значение:
-
^ - Сопоставляет начало ввода
-
$ - Сопоставляет конец ввода
-
. - Сопоставляет любой одиночный символ
-
[ ] - Сопоставляет любые символы внутри скобок
-
[^ ] - Сопоставляет любые символы, не находящиеся внутри скобок
-
- - Внутри скобок задает диапазон включения между символами по обе стороны, например,
[a-f]это[abcdef]Для сопоставления литеральной-с использованием скобок, сделайте её первым или последним символом, например,[+*/-]сопоставляет базовые математические операторы. -
* - Сопоставляет предшествующий шаблон ноль или более раз
-
+ - Сопоставляет предшествующий шаблон один или более раз
-
? - Сопоставляет предшествующий шаблон ноль или один раз
-
| - Сопоставляет шаблон по обе стороны от
| -
() - Сохраняет сопоставленное подвыражение, которое можно использовать в операции
REGEX REPLACE. Кроме того, оно сохраняется всеми командами, связанными с регулярными выражениями, включая, например,if(MATCHES), в переменныхCMAKE_MATCH_<n>для<n>0..9.
*, + и ? имеют более высокий приоритет, чем конкатенация. | имеет более низкий приоритет, чем конкатенация. Это означает, что регулярное выражение ^ab+d$ сопоставляет abbd но не ababd, и регулярное выражение ^(ab|cd)$ сопоставляет ab но не abd.
Обработка
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(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 - Алгоритм хеширования сообщений 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 <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 запрашивает представление текущей даты/времени в формате 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–2019 Kitware, Inc. and Contributors
Licensed under the BSD 3-clause License.
https://cmake.org/cmake/help/v3.12/command/string.html