Spec-Zone.ru › Qt 5.13

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

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

Шаблоны проектов приложений и библиотек 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.13/qmake-project-files.html

Spec-Zone.ru

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