Создание общих типов проектов
В этом разделе описывается, как настроить файлы проекта qmake для трех распространённых типов проектов, основанных на Qt: приложение, библиотека и плагин. Хотя все типы проектов используют многие из тех же переменных, каждый из них использует специфичные для проекта переменные для настройки выходных файлов.
Здесь не описаны переменные, зависящие от платформы. Для получения дополнительной информации см. Qt для Windows — Развёртывание и Qt для macOS.
Создание приложения
Шаблон app указывает qmake на генерацию файла Makefile, который будет компилировать приложение. С этим шаблоном тип приложения можно указать, добавив один из следующих параметров в определение переменной CONFIG:
| Параметр | Описание |
|---|---|
| windows | Приложение — это приложение Windows GUI. |
| console |
app шаблон только: приложение — это консольное приложение Windows. |
| testcase | Приложение — автоматизированный тест. |
При использовании этого шаблона распознаются следующие системные переменные qmake. Вам следует использовать их в своём файле .pro для указания информации о вашем приложении. Для дополнительных зависимых от платформы системных переменных можно обратиться к Примечаниям к платформе.
- HEADERS - Список файлов заголовков для приложения.
- SOURCES - Список файлов исходного кода C++ для приложения.
- FORMS - Список файлов пользовательского интерфейса для приложения (созданных с помощью Qt Designer).
- LEXSOURCES - Список файлов исходного кода Lex для приложения.
- YACCSOURCES - Список файлов исходного кода Yacc для приложения.
- TARGET - Имя исполняемого файла для приложения. По умолчанию совпадает с именем файла проекта. (Расширение, если оно есть, добавляется автоматически).
- DESTDIR - Каталог, в котором размещается исполняемый файл целевого приложения.
- DEFINES - Список дополнительных определений препроцессора, необходимых для приложения.
- INCLUDEPATH - Список дополнительных путей включения, необходимых для приложения.
- DEPENDPATH - Путь поиска зависимостей для приложения.
- VPATH - Путь поиска предоставленных файлов.
- DEF_FILE - Только для Windows: файл .def, который необходимо связать с приложением.
Вам нужно использовать только те системные переменные, для которых у вас есть значения. Например, если у вас нет дополнительных INCLUDEPATH, то указывать их не нужно. qmake добавит необходимые значения по умолчанию. Файл проекта с примером может выглядеть так:
TEMPLATE = app DESTDIR = c:/helloapp HEADERS += hello.h SOURCES += hello.cpp SOURCES += main.cpp DEFINES += USE_MY_STUFF CONFIG += release
Для элементов с единственным значением, например, для шаблона или каталога назначения, мы используем «=»; но для многозначных элементов мы используем «+=» для добавления к имеющимся элементам данного типа. Использование «=» заменяет значение переменной новым значением. Например, если мы напишем DEFINES=USE_MY_STUFF, все остальные определения удаляются.
Создание тестового случая
Проект тестового случая — это app проект, предназначенный для запуска в качестве автоматизированного теста. Любой app может быть помечен как тестовый случай, добавив значение testcase в переменную CONFIG.
Для проектов тестовых случаев qmake вставит целевой check в сгенерированный Makefile. Этот целевой элемент запустит приложение. Тест считается пройденным, если он завершается с кодом выхода, равным нулю.
Целевой элемент check автоматически рекурсивно обрабатывает проекты SUBDIRS. Это означает, что можно выполнить команду make check из проекта SUBDIRS для запуска всего набора тестов.
Выполнение целевого элемента check может быть настроено с помощью определённых переменных Makefile. Эти переменные:
| Переменная | Описание |
|---|---|
| TESTRUNNER | Команда или фрагмент командной оболочки, добавляемый перед каждой командой теста. Пример использования — скрипт «timeout», который завершит тест, если он не выполнится в течение указанного времени. |
| TESTARGS | Дополнительные аргументы, добавляемые к каждой команде теста. Например, может быть полезно передать дополнительные аргументы для установки выходного файла и формата из теста (например, параметр -o filename,format , поддерживаемый QTestLib). |
Примечание: Переменные должны быть установлены при вызове инструмента make, а не в файле .pro. Большинство инструментов make поддерживают установку переменных Makefile непосредственно в командной строке:
# Run tests through test-wrapper and use JUnit XML output format. # In this example, test-wrapper is a fictional wrapper script which terminates # a test if it does not complete within the amount of seconds set by "--timeout". # The "-o result.xml,junitxml" options are interpreted by QTestLib. make check TESTRUNNER="test-wrapper --timeout 120" TESTARGS="-o result.xml,junitxml"
Проекты тестовых случаев могут быть дополнительно настроены с помощью следующих CONFIG параметров:
| Параметр | Описание |
|---|---|
| insignificant_test | Код выхода теста будет игнорироваться во время make check. |
Тестовые случаи часто пишутся с помощью QTest или TestCase, но использование CONFIG+=testcase и make check не является обязательным. Единственным основным требованием является то, что программа теста завершается с кодом выхода 0 при успехе и ненулевым кодом выхода при неудаче.
Создание библиотеки
Шаблон lib указывает qmake на генерацию файла Makefile, который будет компилировать библиотеку. При использовании этого шаблона поддерживается переменная VERSION, помимо системных переменных, которые поддерживает шаблон app. Используйте эти переменные в вашем файле .pro для указания информации о библиотеке.
При использовании шаблона lib следующие параметры могут быть добавлены в переменную CONFIG для определения типа создаваемой библиотеки:
| Параметр | Описание |
|---|---|
| dll | Библиотека — это динамическая библиотека (dll). |
| staticlib | Библиотека — это статическая библиотека. |
| plugin | Библиотека — это плагин. |
Следующий параметр также может быть определен для предоставления дополнительной информации о библиотеке.
- VERSION — Номер версии целевой библиотеки. Например, 2.3.1.
Имя целевого файла библиотеки зависит от платформы. Например, в X11, macOS и iOS имя библиотеки будет иметь префикс lib. В Windows префикс к имени файла не добавляется.
Создание плагина
Плагины создаются с использованием шаблона lib, как описано в предыдущем разделе. Это указывает qmake на генерацию Makefile для проекта, который будет создавать плагин в подходящем для каждой платформы формате, обычно в виде библиотеки. Как и в обычных библиотеках, переменная VERSION используется для указания информации о плагине.
- VERSION — Номер версии целевой библиотеки. Например, 2.3.1.
Создание плагина Qt Designer
Плагины Qt Designer создаются с использованием набора конфигурационных настроек, зависящих от способа настройки Qt для вашей системы. Для удобства эти настройки можно включить, добавив designer в переменную QT. Например:
QT += widgets designer
См. Примеры Qt Designer для получения дополнительных примеров проектов на основе плагинов.
Компиляция и установка в режимах отладки и релиз
Иногда необходимо скомпилировать проект как в режиме отладки, так и в режиме релиза. Хотя переменная CONFIG может содержать как debug, так и release параметры, применяется только последний указанный параметр.
Компиляция в обоих режимах
Для того, чтобы проект компилировался в обоих режимах, необходимо добавить параметр debug_and_release в переменную CONFIG.
CONFIG += debug_and_release
CONFIG(debug, debug|release) {
TARGET = debug_binary
} else {
TARGET = release_binary
} Область в приведённом фрагменте кода изменяет целевые элементы сборки в каждом режиме, чтобы гарантировать, что получаемые целевые элементы имеют разные имена. Предоставление разных имён целевым элементам гарантирует, что один не перезапишет другой.
При обработке файла проекта qmake сгенерирует правило Makefile, позволяющее компилировать проект в обоих режимах. Это можно вызвать следующим образом:
make all
Параметр build_all может быть добавлен в переменную CONFIG в файле проекта, чтобы гарантировать, что проект по умолчанию компилируется в обоих режимах:
CONFIG += build_all
Это позволит обработать Makefile с использованием правила по умолчанию:
make
Установка в обоих режимах
Параметр build_all также гарантирует, что обе версии целевого элемента будут установлены при вызове правила установки:
make install
Возможна настройка имён целевых элементов сборки в зависимости от платформы. Например, имя библиотеки или плагина может использовать различную конвенцию в Windows по сравнению с Unix-платформами:
CONFIG(debug, debug|release) {
mac: TARGET = $$join(TARGET,,,_debug)
win32: TARGET = $$join(TARGET,,d)
} По умолчанию в приведённом фрагменте кода изменяется имя целевого элемента сборки при компиляции в режиме отладки. Могла бы быть добавлена строка else в область, чтобы сделать то же самое для режима релиза. Если оставить как есть, имя целевого элемента не изменится.
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-6.2/qmake-common-projects.html