Spec-Zone.ru › Qt 5.15

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

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

Spec-Zone.ru

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