Spec-Zone.ru › Qt

Функции замены

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, и возвращает значение, прочитанное из stdin.

Если decorate равно true (по умолчанию), к вопросу добавляются общий префикс и суффикс, определяющие его как запрос.

quote(string)

Преобразует всю string в единое целое и возвращает результат. Это просто способ заключить строку в двойные кавычки.

re_escape(string)

Возвращает string с каждым специальным символом регулярного выражения, экранированным обратной косой чертой. Эта функция является обёрткой вокруг QRegularExpression::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. Однако правила разделения слов по умолчанию (то есть пустые строки или true, и false) отличаются.

Если вы передадите 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-6.2/qmake-function-reference.html

Spec-Zone.ru

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