Spec-Zone.ru › Qt 5.9

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

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

Spec-Zone.ru

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