Документация
ОС Аврора 5.1.0

Конфигурация проекта с qmake

Инструмент qmake помогает упростить процесс сборки проектов. Он автоматизирует генерацию файлов Makefile так, что для создания каждого из них требуется всего несколько строк информации.

Проекты описываются содержимым pro-файлов проекта. Файлы проекта обычно содержат список исходных и заголовочных файлов, общую информацию о конфигурации и любые специфичные для приложения детали, такие как список дополнительных библиотек или путей.

Файлы проекта могут содержать несколько различных элементов, включая комментарии, объявления переменных, встроенные функции и некоторые простые структуры управления. В большинстве простых проектов необходимо только объявить исходные и заголовочные файлы с некоторыми базовыми параметрами конфигурации.

Формат файла проекта, используемый qmake, может использоваться для поддержки как простых, так и довольно сложных систем сборки. Простые файлы проектов используют простой декларативный стиль, определяющий стандартные переменные, указывающие исходные и заголовочные файлы, которые используются в проекте. Комплексные проекты могут использовать структуры управления потоком для точной настройки процесса сборки.

Переменные qmake

В файле проекта переменные используются для хранения списков строк. В простейших проектах эти переменные сообщают qmake о параметрах конфигурации для использования или содержат имена файлов и пути, которые будут использоваться в процессе сборки.

qmake ищет определённые переменные в каждом файле проекта и использует их содержимое для определения того, что он должен писать в Makefile.

Список часто используемых переменных представлен в таблице.

Название Описание
CONFIG Общие параметры конфигурации проекта.
DEPENDPATH Путь поиска зависимостей для приложения.
DEFINES qmake добавляет значения этой переменной в качестве макросов препроцессора компилятора C.
DESTDIR Каталог, в который будет помещен исполняемый файл или двоичный файл.
DISTFILES Список файлов, которые должны быть включены в пакет приложения.
HEADERS Список имён файлов заголовков (.h), используемых при создании проекта.
INCLUDEPATH Список любых дополнительных путей, необходимых для приложения.
LIBS Сторонние библиотеки, используемые в проекте.
PKGCONFIG Сторонние библиотеки, подключаемые с помощью pkg-config.
QT Список модулей Qt, используемых в проекте.
RESOURCES Список файлов ресурсов (.qrc), которые будут включены в окончательный проект.
SOURCES Список файлов исходного кода, которые будут использоваться при создании проекта.
TARGET Имя исполняемого файла для приложения, по умолчанию используется имя файла проекта
TEMPLATE Шаблон для использования в проекте, определяет, будет ли вывод процесса сборки приложением, библиотекой или плагином
TRANSLATIONS Файлы переводов.
VPATH Путь для поиска файлов.

Операторы

Оператор = присваивает значение переменной:

TARGET = ru.auroraos.MyApp

Команда перезапишет любые значения, ранее установленные для TARGET.

Оператор += добавляет новое значение в список значений переменной:

DISTFILES += USE_MY_STUFF

Оператор -= удаляет значение из списка значений в переменной:

DISTFILES -= USE_MY_STUFF

Оператор *= добавляет значение в список значений в переменной, но только если оно ещё не присутствует:

DISTFILES *= USE_MY_STUFF

Оператор ~= заменяет любые значения, которые соответствуют регулярному выражению с указанным значением:

DISTFILES ~= s/QT_[DT].+/QT

Любые значения в списке, начинающиеся с QT_D или QT_T, заменяются QT.

Шаблоны проектов

Переменная TEMPLATE используется для определения типа проекта, который будет собран. Если она не объявлена в файле проекта, qmake предполагает, что должно быть создано приложение.

Основные типы проектов:

  • app (по умолчанию) — приложение;
  • lib — библиотека;
  • subdirs — проект с поддиректориями, заданными с помощью переменной SUBDIRS. Каждый подкаталог должен содержать свой собственный файл проекта.

При использовании шаблона lib в переменную CONFIG можно добавить следующие параметры, чтобы определить тип созданной библиотеки:

  • dll — библиотека является общей библиотекой;
  • staticlib — библиотека представляет собой статическую библиотеку;
  • plugin — библиотека — это плагин.

Проект testcase — это проект приложения, предназначенный для запуска в качестве автоматизированного теста. Любой проект может быть помечен как тестовый добавлением testcase к переменной CONFIG.

Подключение модулей Qt

Переменная QT используется для добавления в проект необходимых Qt-модулей. Например, можно подключить модули XML и Network следующим образом:

QT += network xml

QT включает модули core и gui по умолчанию, поэтому вышеприведённое объявление добавляет к этому списку ещё два пункта. Следующее присваивание исключает модули по умолчанию и приводит к ошибкам при компиляции исходного кода приложения:

QT = network xml # Это опустит модули core и gui

Если требуется создать проект без модуля gui, нужно исключить его с помощью оператора -=:

QT -= gui # Используется только основной модуль core

Список доступных в ОС Аврора Qt-модулей находится в статье о допустимых зависимостях.

Подключение других библиотек

Если в проекте используются другие библиотеки в дополнение к тем, которые поставляются с Qt, их необходимо указать в файле проекта.

Пути, по которым qmake ищет библиотеки для сопоставления, могут быть добавлены в список значений в переменной LIBS. Можно указать пути к библиотекам или использовать нотацию в стиле Unix для указания библиотек и путей.

Например, можно указать библиотеку opencv:

LIBS += -L$$OUT_PWD/../libs/opencv/lib -lopencv_core -lopencv_imgproc

Пути, содержащие заголовочные файлы, также могут быть указаны аналогичным образом с помощью переменной INCLUDEPATH:

INCLUDEPATH += \
    $$PWD/../libs/opencv/modules/core/include \
    $$PWD/../libs/opencv/modules/imgproc/include \
    $$OUT_PWD/../libs/opencv \

Полный пример подключения и использования opencv можно найти в DocumentScanner.

Список доступных в ОС Аврора сторонних библиотек находится в статье о допустимых зависимостях.

Чтобы зависимости проекта были установлены автоматически перед установкой приложения, следует их указать в spec-файле в секции Requires и/или BuildRequires.

Пример pro-файла по умолчанию

При создании проекта с названием MyApp автоматически будет сгенерирован следующий pro-файл:

TARGET = ru.auroraos.MyApp

CONFIG += \
    auroraapp

PKGCONFIG += \

SOURCES += \
    src/main.cpp \

HEADERS += \

DISTFILES += \
    rpm/ru.auroraos.MyApp.spec \
    AUTHORS.md \
    CODE_OF_CONDUCT.md \
    CONTRIBUTING.md \
    LICENSE.BSD-3-CLAUSE.md \
    README.md \

AURORAAPP_ICONS = 86x86 108x108 128x128 172x172

CONFIG += auroraapp_i18n

TRANSLATIONS += \
    translations/ru.auroraos.MyApp.ts \
    translations/ru.auroraos.MyApp-ru.ts \

В TARGET содержится название приложения и организации.

С помощью CONFIG подключается библиотека Libauroraapp.

В SOURCES указывается путь к стартовой точке приложения.

В DISTFILES указываются дополнительные файлы приложения, в том числе конфигурационный spec-файл.

AURORAAPP_ICONS содержит имена каталогов в каталоге icons, где находятся иконки.

TRANSLATIONS содержит пути к файлам с переводами.

Подключение каталога в проект

Если проект содержит каталог с дополнительными файловыми ресурсами, его тоже следует подключить с помощью qmake.

В pro-файл проекта помещается код, указывающий исходное расположение каталога и его будущий каталог при установке приложения на устройстве. Пример:

new_folder.files = new_folder/*	
new_folder.path = /usr/share/$${TARGET}/new_folder	
INSTALLS += new_folder
OTHER_FILES += new_folder/*

В переменной new_folder.files указывается путь к каталогу в проекте.

В переменной new_folder.path указывается путь, по которому каталог вместе с содержимым будет размещён на устройстве.

Примеры использования переменных

Пример подключения заголовочных файлов:

HEADERS += \
    src/applicationcontroller.h \
    src/applicationservice.h \
    src/notificationsmodel.h \

Символ \ здесь и в других примерах ставится в конце каждой строки многострочной команды. Символ / используется в качестве разделителя имён каталогов и файлов в qmake, как и в остальном Qt.

Пример подключения сторонних библиотек через pkg-config:

PKGCONFIG += \
    pushclient \
    nemonotifications-qt5 \

Пример объявления собственных констант через DEFINES:

DEFINES += \
    DBUS_SERVICE=\\\"ru.auroraos.PushReceiver\\\" \
    DBUS_PATH=\\\"/ru/auroraos/PushReceiver\\\" \
    DBUS_INTERFACE=\\\"ru.auroraos.PushReceiver\\\" \
    APP_ID_FILE_PATH=\\\"$${APP_ID_PATH}/$${APP_ID_FILE}\\\" \

Первые три строки примера приведены из проекта PushReceiver, доступного в примерах приложений в Аврора IDE.

Пример указания пути для целевого исполняемого файла:

DESTDIR = ../../lib

Символ .. обозначает движение к родительскому каталогу от текущего. Текущий каталог для начала отсчёта — каталог, где находится данный pro-файл, обычно это корневой каталог проекта.

Пример подключения qrc-файла:

RESOURCES += qml.qrc

Пример указания каталогов для поиска зависимостей:

DEPENDPATH += ../mylib

Пример указания пути для поиска файлов:

VPATH += res/myfiles

Структура проекта qmake

qmake как систему сборки можно выбрать при создании проекта из шаблона в окне Система сборки.

В результате в директории проекта будет создана следующая файловая структура:

.
├── icons
│   ├── 108x108
│   │   └── ru.template.{Имя_проекта}.png
│   ├── 128x128
│   │   └── ru.template.{Имя_проекта}.png
│   ├── 172x172
│   │   └── ru.template.{Имя_проекта}.png
│   └── 86x86
│       └── ru.template.{Имя_проекта}.png
├── qml
│   ├── cover
│   │   └── DefaultCoverPage.qml
│   ├── icons
│   │   └── {Имя_проекта}.svg
│   ├── pages
│   │   ├── AboutPage.qml
│   │   └── MainPage.qml
│   └── {Имя_проекта}.qml
├── rpm
│   ├── ru.template.{Имя_проекта}.changes.in
│   ├── ru.template.{Имя_проекта}.changes.run.in
│   └── ru.template.{Имя_проекта}.spec
├── ru.template.{Имя_проекта}.desktop
├── ru.template.{Имя_проекта}.pro
├── ru.template.{Имя_проекта}.pro.user
├── src
│   └── main.cpp
└── translations
    ├── ru.template.{Имя_проекта}-ru.ts
    └── ru.template.{Имя_проекта}.ts

Мы используем cookies для персонализации сайта и его более удобного использования. Вы можете запретить cookies в настройках браузера.

Пожалуйста ознакомьтесь с политикой использования cookies.