Создание файлов проекта
Файлы проекта содержат всю информацию, необходимую qmake для построения вашего приложения, библиотеки или плагина. Обычно вы используете серию объявлений для указания ресурсов в проекте, но поддержка простых конструкций программирования позволяет описать различные процессы сборки для разных платформ и сред.
Элементы файла проекта
Формат файла проекта, используемый qmake, может быть использован для поддержки как простых, так и достаточно сложных систем сборки. Простые файлы проекта используют простой декларативный стиль, определяя стандартные переменные для указания исходных и заголовочных файлов, используемых в проекте. Сложные проекты могут использовать структуры управления потоком для точной настройки процесса сборки.
Следующие разделы описывают различные типы элементов, используемых в файлах проекта.
Переменные
В файле проекта переменные используются для хранения списков строк. В самых простых проектах эти переменные сообщают qmake о параметрах конфигурации, которые следует использовать, или предоставляют имена файлов и пути для использования в процессе сборки.
qmake ищет определенные переменные в каждом файле проекта и использует их содержимое для определения того, что нужно записать в Makefile. Например, списки значений в переменных HEADERS и SOURCES используются для того, чтобы сообщить qmake о заголовочных и исходных файлах в той же директории, что и файл проекта.
Переменные также могут использоваться для внутреннего хранения временных списков значений, а существующие списки значений могут быть перезаписаны или расширены новыми значениями.
Следующий фрагмент иллюстрирует, как списки значений назначаются переменным:
HEADERS = mainwindow.h paintwidget.h
Список значений в переменной расширяется следующим образом:
SOURCES = main.cpp mainwindow.cpp \
paintwidget.cpp
CONFIG += console Примечание: Первое присвоение включает только значения, указанные в той же строке, что и HEADERS переменная. Второе присвоение разбивает значения в SOURCES переменной по строкам с использованием обратной косой черты (\).
Переменная CONFIG — это еще одна специальная переменная, которую qmake использует при генерации Makefile. Она обсуждается в разделе Общая конфигурация. В фрагменте кода выше, console добавляется к списку существующих значений, содержащихся в CONFIG.
В следующей таблице перечислены некоторые часто используемые переменные и описаны их содержимое. Полный список переменных и их описаний см. в разделе Переменные.
| Переменная | Содержимое |
|---|---|
| CONFIG | Общие параметры конфигурации проекта. |
| DESTDIR | Директория, в которой будет размещен исполняемый файл или двоичный файл. |
| FORMS | Список файлов UI, которые должны быть обработаны компилятором пользовательского интерфейса (uic). |
| HEADERS | Список имен файлов заголовков (.h), используемых при построении проекта. |
| QT | Список модулей Qt, используемых в проекте. |
| RESOURCES | Список файлов ресурсов (.qrc), которые должны быть включены в конечный проект. Дополнительную информацию о этих файлах см. в разделе Система ресурсов Qt. |
| SOURCES | Список файлов исходного кода, которые будут использоваться при построении проекта. |
| TEMPLATE | Шаблон, используемый для проекта. Это определяет, будет ли результатом процесса сборки приложение, библиотека или плагин. |
Содержимое переменной может быть прочитано путем добавления префикса имени переменной $$. Это можно использовать для назначения содержимого одной переменной другой:
TEMP_SOURCES = $$SOURCES
Оператор $$ широко используется с встроенными функциями, которые работают со строками и списками значений. Дополнительную информацию см. в разделе Язык qmake.
Пробелы
Обычно пробелы разделяют значения в присвоениях переменных. Чтобы указать значения, содержащие пробелы, необходимо заключить эти значения в двойные кавычки:
DEST = "Program Files"
Заключенная в кавычки строка обрабатывается как один элемент в списке значений, хранимых переменной. Аналогичный подход используется для обработки путей, содержащих пробелы, особенно при определении переменных INCLUDEPATH и LIBS для платформы Windows:
win32:INCLUDEPATH += "C:/mylibs/extra headers" unix:INCLUDEPATH += "/home/user/extra headers"
Комментарии
Вы можете добавлять комментарии к файлам проекта. Комментарии начинаются с символа # и продолжаются до конца той же строки. Например:
# Comments usually start at the beginning of a line, but they # can also follow other content on the same line.
Чтобы включить символ # в присвоения переменных, необходимо использовать содержимое встроенной переменной LITERAL_HASH.
Встроенные функции и управление потоком
qmake предоставляет ряд встроенных функций для обработки содержимого переменных. Наиболее часто используемая функция в простых файлах проекта — это функция include(), которая принимает имя файла в качестве аргумента. Содержимое данного файла включается в файл проекта в том месте, где используется функция include. Функция include наиболее часто используется для включения других файлов проекта:
include(other.pro)
Поддержка условных конструкций обеспечивается с помощью блоков, которые ведут себя как операторы if в языках программирования:
win32 {
SOURCES += paintwidget_win.cpp
} Присваивания внутри фигурных скобок выполняются только в том случае, если условие истинно. В этом случае, параметр win32 CONFIG должен быть задан. Это происходит автоматически в Windows. Фигурная скобка открытия должна стоять в той же строке, что и условие.
Более сложные операции над переменными, которые обычно требуют циклов, обеспечиваются встроенными функциями, такими как find(), unique() и count(). Эти функции и многие другие предназначены для манипулирования строками и путями, поддержки пользовательского ввода и вызова внешних инструментов. Более подробную информацию об использовании функций см. в разделе Язык qmake. Список всех функций и их описаний см. в разделах Функции замены и Функции проверки.
Шаблоны проектов
Переменная TEMPLATE используется для определения типа проекта, который будет построен. Если это не объявлено в файле проекта, qmake предполагает, что необходимо построить приложение и сгенерирует соответствующий Makefile (или эквивалентный файл) для этой цели.
В следующей таблице обобщены типы доступных проектов и описаны файлы, которые qmake сгенерирует для каждого из них:
| Шаблон | Вывод qmake |
|---|---|
| app (по умолчанию) | Makefile для построения приложения. |
| lib | Makefile для построения библиотеки. |
| aux | Makefile для построения ничего. Используйте этот шаблон, если не нужно вызывать компилятор для создания целевого объекта, например, если ваш проект написан на интерпретируемом языке. Примечание: Этот тип шаблона доступен только для генераторов на основе Makefile. В частности, он не будет работать с генераторами vcxproj и Xcode. |
| subdirs | Makefile, содержащий правила для поддиректорий, указанных с помощью переменной SUBDIRS. Каждая поддиректория должна содержать свой собственный файл проекта. |
| vcapp | Файл проекта Visual Studio для построения приложения. |
| vclib | Файл проекта Visual Studio для построения библиотеки. |
| vcsubdirs | Файл решения Visual Studio для построения проектов в поддиректориях. |
См. Построение общих типов проектов для советов по написанию файлов проекта для проектов, использующих шаблоны app и lib.
Когда используется шаблон subdirs, qmake генерирует Makefile, который проверяет каждую указанную поддиректорию, обрабатывает любой найденный там файл проекта и запускает инструмент make платформы на вновь созданном Makefile. Переменная SUBDIRS используется для хранения списка всех поддиректорий, которые необходимо обработать.
Общая конфигурация
Переменная CONFIG определяет параметры и функции, с которыми должен быть сконфигурирован проект.
Проект может быть собран в режиме release или debug, или в обоих режимах. Если указаны оба режима, действует последний. Если вы укажете параметр debug_and_release для сборки как отладочных, так и релизных версий проекта, сгенерированный qmake Makefile содержит правило, которое собирает обе версии. Это можно вызвать следующим образом:
make all
Добавление параметра build_all к переменной CONFIG делает это правило по умолчанию при сборке проекта.
Примечание: Каждый из параметров, указанных в переменной CONFIG может также использоваться в качестве условия блока. Вы можете проверить наличие определенных параметров конфигурации, используя встроенную функцию CONFIG(). Например, следующие строки показывают функцию в качестве условия блока для проверки, используется ли только параметр opengl:
CONFIG(opengl) {
message(Building with OpenGL support.)
} else {
message(OpenGL support is not available.)
} Это позволяет определять разные конфигурации для сборок release и debug. Дополнительную информацию см. в разделе Использование блоков.
Следующие параметры определяют тип проекта для сборки.
Примечание: Некоторые из этих параметров действуют только при использовании на соответствующей платформе.
| Вариант | Описание |
|---|---|
| qt | Проект является приложением Qt и должен быть связан с библиотекой Qt. Вы можете использовать переменную QT для управления дополнительными модулями Qt, необходимыми вашему приложению. Это значение добавляется по умолчанию, но вы можете удалить его, чтобы использовать qmake для проекта, не связанного с Qt. |
| x11 | Проект является приложением или библиотекой X11. Это значение не нужно, если целевой объект использует Qt. |
Шаблоны проектов приложений и библиотек application and library project templates предоставляют вам более специализированные параметры настройки для точной настройки процесса сборки. Параметры подробно описаны в разделе Building Common Project Types.
Например, если ваше приложение использует библиотеку Qt, и вы хотите скомпилировать его в режиме debug, ваш файл проекта будет содержать следующую строку:
CONFIG += qt debug
Примечание: Вы должны использовать "+=", а не "=", иначе qmake не сможет использовать конфигурацию Qt для определения настроек, необходимых для вашего проекта.
Объявление библиотек Qt
Если переменная CONFIG содержит значение qt, поддержка qmake для приложений Qt будет включена. Это позволяет точно настроить, какие модули Qt используются вашим приложением. Это достигается с помощью переменной QT, которую можно использовать для объявления необходимых модулей расширений. Например, мы можем включить модули XML и сети следующим образом:
QT += network xml
Примечание: QT по умолчанию включает модули core и gui, поэтому вышеупомянутое объявление добавляет модули сети и XML в этот список по умолчанию. Следующее присваивание исключает модули по умолчанию и может привести к ошибкам при компиляции исходного кода приложения:
QT = network xml # This will omit the core and gui modules.
Если вы хотите скомпилировать проект без модуля gui, вам нужно исключить его с помощью оператора "-=". По умолчанию QT содержит как core, так и gui, поэтому следующая строка приведет к сборке минимального проекта Qt:
QT -= gui # Only the core module is used.
Список модулей Qt, которые можно добавить в переменную QT, см. в QT.
Функции конфигурации
qmake можно настроить с помощью дополнительных функций конфигурации, указанных в файлах функций (.prf). Эти дополнительные функции часто обеспечивают поддержку пользовательских инструментов, используемых в процессе сборки. Чтобы добавить функцию в процесс сборки, добавьте имя функции (основную часть имени файла функции) к переменной CONFIG.
Например, qmake может настроить процесс сборки для использования внешних библиотек, поддерживаемых pkg-config, таких как библиотеки D-Bus и ogg, с помощью следующих строк:
CONFIG += link_pkgconfig PKGCONFIG += ogg dbus-1
Дополнительную информацию об добавлении функций см. в разделе Adding New Configuration Features.
Объявление других библиотек
Если вы используете в проекте другие библиотеки помимо тех, которые поставляются с Qt, вам нужно указать их в файле проекта.
Пути, по которым qmake ищет библиотеки и конкретные библиотеки, с которыми необходимо связать проект, можно добавить в список значений переменной LIBS. Вы можете указать пути к библиотекам или использовать обозначения в стиле Unix для указания библиотек и путей.
Например, следующие строки показывают, как можно указать библиотеку:
LIBS += -L/usr/local/lib -lmath
Пути к файлам заголовков также можно указать аналогичным образом, используя переменную INCLUDEPATH.
Например, чтобы добавить несколько путей для поиска файлов заголовков:
INCLUDEPATH = c:/msdev/include d:/stl/include
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-6.2/qmake-project-files.html