Spec-Zone.ru › Qt 5.14

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

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. Это использование представляет собой простую индексацию массива, так как будет возвращён ровно один элемент.

Также можно указать начало и конец в одном аргументе, разделив числа двумя точками.

Отрицательные числа представляют индексы, начинающиеся с конца списка, причём -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 на аргументы, переданные в списке аргументов функции arguments, и возвращает обработанную строку.

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-5.14/qmake-function-reference.html

Spec-Zone.ru

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