Spec-Zone.ru › CMake 3.19

string

Строковые операции.

Синопсис

Search and Replace
  string(FIND <string> <substring> <out-var> [...])
  string(REPLACE <match-string> <replace-string> <out-var> <input>...)
  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(HEX <string> <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> ...)

JSON
  string(JSON <out-var> [ERROR_VARIABLE <error-var>]
         {GET | TYPE | LENGTH | REMOVE}
         <json-string> <member|index> [<member|index> ...])
  string(JSON <out-var> [ERROR_VARIABLE <error-var>]
         MEMBER <json-string>
         [<member|index> ...] <index>)
  string(JSON <out-var> [ERROR_VARIABLE <error-var>]
         SET <json-string>
         <member|index> [<member|index> ...] <value>)
  string(JSON <out-var> [ERROR_VARIABLE <error-var>]
         EQUAL <json-string1> <json-string2>)

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

Поиск и замена с помощью обычных строк

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(HEX <string> <output_variable>)

Преобразует каждый байт в входных данных <string> в его шестнадцатеричное представление и сохраняет конкатенированные шестнадцатеричные цифры в <output_variable> . Буквы в выводе (a - f) находятся в нижнем регистре.

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.

JSON

Функциональность для запроса JSON-строки.

Примечание

В каждом из следующих подкоманд, связанных с JSON, если необязательный аргумент ERROR_VARIABLE задан, ошибки будут сообщаться в <error-variable> и <out-var> будет установлено в <member|index>-[<member|index>...]-NOTFOUND с элементами пути до точки возникновения ошибки или просто в NOTFOUND если соответствующего пути нет. Если ошибка возникает, но опция ERROR_VARIABLE не задана, генерируется сообщение об ошибке. Если ошибок нет, <error-variable> будет установлено в NOTFOUND.

string(JSON <out-var> [ERROR_VARIABLE <error-variable>]
       GET <json-string> <member|index> [<member|index> ...])

Получите элемент из <json-string> по указанному расположению с помощью списка аргументов <member|index>.

Элементы массивов и объектов будут возвращены как JSON-строки. Булевые элементы будут возвращены как ON или OFF.

Элементы Null будут возвращены как пустая строка. Числа и строки будут возвращены как строки.

string(JSON <out-var> [ERROR_VARIABLE <error-variable>]
       TYPE <json-string> <member|index> [<member|index> ...])

Получите тип элемента в <json-string> по указанному расположению с помощью списка аргументов <member|index>.

<out-var> будет установлено в одно из значений NULL, NUMBER, STRING, BOOLEAN, ARRAY, или OBJECT.

string(JSON <out-var> [ERROR_VARIABLE <error-var>]
       MEMBER <json-string>
       [<member|index> ...] <index>)

Получите имя <index>-го члена в <json-string> по указанному расположению с помощью списка аргументов <member|index>.

Требуется элемент типа объект.

string(JSON <out-var> [ERROR_VARIABLE <error-variable>]
       LENGTH <json-string> <member|index> [<member|index> ...])

Получите длину элемента в <json-string> по указанному расположению с помощью списка аргументов <member|index>.

Требуется элемент типа массив или объект.

string(JSON <out-var> [ERROR_VARIABLE <error-variable>]
       REMOVE <json-string> <member|index> [<member|index> ...])

Удалите элемент из <json-string> по указанному расположению с помощью списка аргументов <member|index>.

JSON-строка без удалённого элемента будет сохранена в <out-var>.

string(JSON <out-var> [ERROR_VARIABLE <error-variable>]
       SET <json-string> <member|index> [<member|index> ...] <value>)

Установите элемент в <json-string> по указанному расположению с помощью списка аргументов <member|index> в <value>.

Содержание <value> должно быть корректным JSON.

string(JSON <out-var> [ERROR_VARIABLE <error-var>]
       EQUAL <json-string1> <json-string2>)

Сравните два JSON-объекта, заданные <json-string1> и <json-string2> на равенство.

Содержимое <json-string1> и <json-string2> должно быть корректным JSON.

<out-var> будет установлено в истинное значение, если JSON-объекты считаются равными, или ложное значение в противном случае.

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

Spec-Zone.ru

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