Функции замены
qmake предоставляет функции для обработки содержимого переменных во время процесса конфигурации. Эти функции называются функциями замены. Как правило, они возвращают значения, которые можно присвоить другим переменным. Эти значения можно получить, добавив перед функцией оператор $$. Функции замены можно разделить на встроенные функции и библиотеки функций.
См. также Функции тестирования.
Встроенные функции замены
Основные функции замены реализованы как встроенные функции.
absolute_path(path[, base])
Возвращает абсолютный путь к path.
Если base не указан, используется текущий каталог в качестве базового каталога. Если это относительный путь, он разрешается относительно текущего каталога перед использованием.
Например, следующий вызов возвращает строку "/home/johndoe/myproject/readme.txt":
message($$absolute_path("readme.txt", "/home/johndoe/myproject")) Эта функция была добавлена в Qt 5.0.
См. также clean_path(), relative_path().
basename(variablename)
Возвращает имя файла, указанное в variablename.
Например:
FILE = /etc/passwd FILENAME = $$basename(FILE) #passwd
cat(filename[, mode])
Возвращает содержимое filename. Вы можете указать следующие параметры для mode:
-
blobвозвращает всё содержимое файла как одно значение -
linesвозвращает каждую строку как отдельное значение (без символов конца строки) -
true(значение по умолчанию) иfalseвозвращают содержимое файла как отдельные значения, разделенные правилами разделения списка значений qmake (как в присваивании переменных). Еслиmodeравенfalse, значения, содержащие только символ новой строки, вставляются в список, чтобы указать, где были разрывы строк в файле.
clean_path(path)
Возвращает path с нормализованными символами разделителей каталогов (преобразованными в "/") и удаленными избыточными, а также разрешенными "." и ".." (по возможности). Эта функция является оболочкой для QDir::cleanPath.
Эта функция была добавлена в Qt 5.0.
См. также absolute_path(), relative_path(), shell_path(), system_path().
dirname(file)
Возвращает часть имени каталога указанного файла. Например:
FILE = /etc/X11R6/XF86Config DIRNAME = $$dirname(FILE) #/etc/X11R6
enumerate_vars
Возвращает список всех определенных имен переменных.
Эта функция была добавлена в Qt 5.0.
escape_expand(arg1 [, arg2 ..., argn])
Принимает любое количество аргументов. Он расширяет последовательности экранирования \n, \r, \t для каждого аргумента и возвращает аргументы в виде списка.
Примечание: Если вы хотите указать строку для буквального расширения, вам необходимо экранировать обратные слэши, как показано в следующем фрагменте кода:
message("First line$$escape_expand(\\n)Second line") find(variablename, substr)
Возвращает все значения в variablename, которые соответствуют регулярному выражению substr.
MY_VAR = one two three four MY_VAR2 = $$join(MY_VAR, " -L", -L) -Lfive MY_VAR3 = $$member(MY_VAR, 2) $$find(MY_VAR, t.*)
MY_VAR2 будет содержать '-Lone -Ltwo -Lthree -Lfour -Lfive', а MY_VAR3 будет содержать 'three two three'.
files(pattern[, recursive=false])
Расширяет указанный шаблон подстановок и возвращает список имен файлов. Если recursive равно true, эта функция спускается в подкаталоги.
first(variablename)
Возвращает первое значение variablename.
Например, следующий вызов возвращает firstname:
CONTACT = firstname middlename surname phone message($$first(CONTACT))
См. также take_first(), last().
format_number(number[, options...])
Возвращает number в формате, заданном options. Вы можете указать следующие параметры:
-
ibase=nустанавливает основание входных данных вn -
obase=nустанавливает основание выходных данных вn -
width=nустанавливает минимальную ширину выходных данных вn. Если выходные данные корочеwidth, они дополняются пробелами -
zeropadдополняет выходные данные нулями вместо пробелов -
padsignдобавляет пробел перед положительными значениями в выводе -
alwayssignдобавляет знак плюс перед положительными значениями в выводе -
leftalignпомещает заполнение справа от значения в выводе
Дробные числа в настоящее время не поддерживаются.
Например, следующий вызов преобразует шестнадцатеричное число BAD в 002989:
message($$format_number(BAD, ibase=16 width=6 zeropad))
Эта функция была добавлена в Qt 5.0.
fromfile(filename, variablename)
Вычисляет filename как файл проекта qmake и возвращает значение, присвоенное variablename.
См. также infile().
getenv(variablename)
Возвращает значение переменной среды variablename. Это в основном эквивалентно синтаксису $$(variablename). Однако функция getenv поддерживает переменные среды с круглыми скобками в их имени.
Эта функция была добавлена в Qt 5.12.
join(variablename, glue, before, after)
Объединяет значение variablename с glue. Если это значение не пустое, функция предваряет его before и завершает after. variablename — единственное обязательное поле, остальные по умолчанию пустые строки. Если вам нужно закодировать пробелы в glue, before, или after, вы должны их заключить в кавычки.
last(variablename)
Возвращает последнее значение variablename.
Например, следующий вызов возвращает phone:
CONTACT = firstname middlename surname phone message($$last(CONTACT))
См. также take_last(), first().
list(arg1 [, arg2 ..., argn])
Принимает произвольное количество аргументов. Создает переменную с уникальным именем, содержащую список аргументов, и возвращает имя этой переменной. Вы можете использовать переменную для написания цикла, как показано в следующем фрагменте кода
for(var, $$list(foo bar baz)) {
...
} вместо:
values = foo bar baz
for(var, values) {
...
} lower(arg1 [, arg2 ..., argn])
Принимает произвольное количество аргументов и преобразует их в нижний регистр.
См. также upper().
member(variablename [, start [, end]])
Возвращает срез значения списка variablename с индексами элементов с нулевой базой между start и end (включительно).
Если start не задан, он по умолчанию равен нулю. Это использование эквивалентно $$first(variablename).
Если end не задан, он по умолчанию равен start. Это использование представляет собой простую индексацию массива, так как будет возвращен ровно один элемент.
Также можно указать start и end в одном аргументе, разделив числа двумя точками.
Отрицательные числа представляют индексы, начиная с конца списка, где -1 — последний элемент.
Если любой из индексов выходит за пределы диапазона, возвращается пустой список.
Если end меньше start, элементы возвращаются в обратном порядке.
Примечание: То, что конечный индекс включительно и неупорядочен, подразумевает, что пустой список будет возвращен только при недействительном индексе (что подразумевается пустой переменной входных данных).
См. также str_member().
num_add(arg1 [, arg2 ..., argn])
Принимает произвольное количество числовых аргументов и складывает их, возвращая сумму.
Вычитание неявно поддерживается из-за возможности просто добавить знак минус перед числовым значением, чтобы сделать его отрицательным:
sum = $$num_add($$first, -$$second)
Если операнд может быть уже отрицательным, для нормализации числа необходим другой шаг:
second_neg = -$$second second_neg ~= s/^--// sum = $$num_add($$first, $$second_neg)
Эта функция была добавлена в Qt 5.8.
prompt(question [, decorate])
Отображает указанный question, и возвращает значение, считанное со стандартного ввода.
Если decorate равно true (значение по умолчанию), к вопросу добавляются префикс и суффикс, идентифицирующие его как запрос.
quote(string)
Преобразует всю string в один сущности и возвращает результат. Это просто удобный способ заключить строку в двойные кавычки.
re_escape(string)
Возвращает string с каждым специальным символом регулярного выражения, экранированным обратной косой чертой. Эта функция является оболочкой для QRegExp::escape.
read_registry(tree, key[, flag])
Возвращает значение ключа реестра key внутри дерева tree.
Поддерживаются только деревья HKEY_CURRENT_USER (HKCU) и HKEY_LOCAL_MACHINE (HKLM).
flag может быть WOW64_32KEY (32) или WOW64_64KEY (64).
Примечание: Эта функция доступна только на хостах Windows.
Эта функция была добавлена в Qt 5.12.1.
relative_path(filePath[, base])
Возвращает путь к filePath относительно base.
Если base не указан, используется текущий каталог проекта. Если он относительный, он разрешается относительно текущего каталога проекта перед использованием.
Если filePath относительный, он сначала разрешается относительно базового каталога; в этом случае функция фактически действует как $$clean_path().
Эта функция была добавлена в Qt 5.0.
См. также absolute_path(), clean_path().
replace(string, old_string, new_string)
Заменяет каждое вхождение old_string на new_string в содержимом переменной, предоставленной как string. Например, код
MESSAGE = This is a tent. message($$replace(MESSAGE, tent, test))
выводит сообщение:
This is a test.
resolve_depends(variablename, prefix)
Это внутренняя функция, которая, как правило, не требуется.
Эта функция была добавлена в Qt 5.0.
reverse(variablename)
Возвращает значения variablename в обратном порядке.
Эта функция была добавлена в Qt 5.0.
section(variablename, separator, begin, end)
Возвращает часть значения variablename. Эта функция является обёрткой вокруг QString::section.
Например, следующий вызов выводит surname:
CONTACT = firstname:middlename:surname:phone message($$section(CONTACT, :, 2, 2))
shadowed(path)
Преобразует путь из каталога исходного проекта в каталог сборки. Эта функция возвращает path для сборки из исходного кода. Она возвращает пустую строку, если path указывает на директорию вне дерева исходного кода.
Эта функция была добавлена в Qt 5.0.
shell_path(path)
Преобразует все разделители каталогов в path в разделители, совместимые с оболочкой, используемой при сборке проекта (то есть, оболочкой, вызываемой инструментом make). Например, косые черты преобразуются в обратные косые черты при использовании оболочки Windows.
Эта функция была добавлена в Qt 5.0.
См. также system_path().
shell_quote(arg)
Обрамляет arg кавычками для оболочки, используемой во время сборки проекта.
Эта функция была добавлена в Qt 5.0.
См. также system_quote().
size(variablename)
Возвращает количество значений variablename.
См. также str_size().
sort_depends(variablename, prefix)
Это внутренняя функция, которая, как правило, вам не понадобится.
Эта функция была добавлена в Qt 5.0.
sorted(variablename)
Возвращает список значений в variablename с элементами, отсортированными по возрастанию в ASCII порядке.
Для числовой сортировки можно использовать нулевую дополняемость значений до фиксированной длины с помощью функции format_number().
Эта функция была добавлена в Qt 5.8.
split(variablename, separator)
Разделяет значение variablename на отдельные значения и возвращает их в виде списка. Эта функция является обёрткой вокруг QString::split.
Например:
CONTACT = firstname:middlename:surname:phone message($$split(CONTACT, :))
sprintf(string, arguments...)
Заменяет %1-%9 в string на переданные аргументы в виде списка, разделённого запятыми, и возвращает обработанную строку.
str_member(arg [, start [, end]])
Эта функция идентична member(), за исключением того, что она работает со строковым значением вместо переменной списка, и, следовательно, индексы относятся к позициям символов.
Эта функция может использоваться для реализации многих распространённых операций с нарезкой строк:
# $$left(VAR, len) left = $$str_member(VAR, 0, $$num_add($$len, -1)) # $$right(VAR, len) right = $$str_member(VAR, -$$num, -1) # $$mid(VAR, off, len) mid = $$str_member(VAR, $$off, $$num_add($$off, $$len, -1)) # $$mid(VAR, off) mid = $$str_member(VAR, $$off, -1) # $$reverse(VAR) reverse = $$str_member(VAR, -1, 0)
Примечание: В этих реализациях нулевой len аргумент необходимо обрабатывать отдельно.
См. также member(), num_add().
Эта функция была добавлена в Qt 5.8.
str_size(arg)
Возвращает количество символов в аргументе.
См. также size().
Эта функция была добавлена в Qt 5.8.
system(command[, mode[, stsvar]])
Вы можете использовать этот вариант функции system для получения stdout от команды и присваивания его переменной.
Например:
UNAME = $$system(uname -s) contains( UNAME, [lL]inux ):message( This looks like Linux ($$UNAME) to me )
Как и $$cat(), аргумент mode принимает blob, lines, true, и false в качестве значения. Однако правила разбиения по словам (legacy) отличаются.
Если вы передаёте stsvar, код завершения команды будет сохранён в этой переменной. Если команда завершится с ошибкой, статус будет -1, в противном случае — неотрицательный код завершения, выбранный командой. Обычно достаточно сравнения статуса с нулём (успех).
См. также тестовый вариант функции system().
system_path(path)
Преобразует все разделители каталогов в path в разделители, совместимые с оболочкой, используемой функциями system() для вызова команд. Например, косые черты преобразуются в обратные косые черты для оболочки Windows.
Эта функция была добавлена в Qt 5.0.
См. также shell_path().
system_quote(arg)
Обрамляет arg кавычками для оболочки, используемой функциями system().
Эта функция была добавлена в Qt 5.0.
См. также shell_quote().
take_first(variablename)
Возвращает первое значение variablename и удаляет его из исходной переменной.
Это удобно для реализации очередей, например.
Эта функция была добавлена в Qt 5.8.
См. также take_last(), first().
take_last(variablename)
Возвращает последнее значение variablename и удаляет его из исходной переменной.
Это удобно для реализации стеков, например.
Эта функция была добавлена в Qt 5.8.
См. также take_first(), last().
unique(variablename)
Возвращает список значений в variablename с удалёнными дублирующимися элементами. Например:
ARGS = 1 2 3 2 5 1 ARGS = $$unique(ARGS) #1 2 3 5
upper(arg1 [, arg2 ..., argn])
Принимает любое количество аргументов и преобразует их в верхний регистр.
См. также lower().
val_escape(variablename)
Экранирует значения variablename таким образом, чтобы они могли быть обработаны как код qmake.
Эта функция была добавлена в Qt 5.0.
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-5.13/qmake-function-reference.html