Создание файлов проекта
Файлы проекта содержат всю информацию, необходимую 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 | Список файлов пользовательского интерфейса, которые будут обработаны компилятором пользовательского интерфейса (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 для сборки и отладки версий проекта, Makefile, сгенерированный qmake, включает правило, которое собирает обе версии. Это можно вызвать следующим образом:
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. |
Шаблоны проекта приложения и библиотеки предоставляют вам более специализированные параметры конфигурации для тонкой настройки процесса сборки. Параметры подробно описаны в Руководстве по сборке общих типов проектов.
Например, если ваше приложение использует библиотеку 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
Дополнительную информацию о добавлении параметров см. в разделе Добавление новых параметров конфигурации.
Объявление других библиотек
Если вы используете в проекте другие библиотеки помимо тех, которые поставляются с 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-5.14/qmake-project-files.html