Spec-Zone.ru › Qt 5.11

Создание файлов проекта

Файлы проекта содержат всю информацию, необходимую 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 определяет параметры и функции, с которыми должен быть сконфигурирован проект.

Проект можно скомпилировать в режиме отладки или релиза, или в обоих режимах. Если заданы оба режима (отладки и релиза), действует последний. Если вы указываете параметр 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.

Шаблоны проекта приложения и библиотеки предоставляют вам более специализированные параметры конфигурации для тонкой настройки процесса сборки. Параметры подробно описаны в Руководстве по сборке общих типов проектов.

Например, если ваше приложение использует библиотеку 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/archives/qt-5.11/qmake-project-files.html

Spec-Zone.ru

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