Главная · Все классы · Основные классы · Классы по группам · Модули · Функции

[Предыдущая: Использование qmake] [Содержание] [Следующая: Запуск qmake]

Файлы проекта qmake

Файлы проекта содержат всю необходимую информацию для того, чтобы qmake собрал ваше приложение, библиотеку или подключаемый модуль (plugin). Ресурсы, используемые вашим приложением, определяются в основном с помощью последовательностей объявлений, но, кроме того, поддержка простой программной структуры позволяет вам описывать различные процессы компоновки для различных платформ и сред.

Элементы файла проекта

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

Следующие разделы описывают различные типы элементов, используемых в файлах проекта.

Переменные

В файле проекта, переменные используются для хранения списков строк. В простых проектах эти переменные информируют qmake о параметрах настройки, именах файлов и каталогах, которые используются в процессе сборки.

qmake ищет определенные переменные для каждого файла проекта и использует их содержимое для определения того, что нужно записать в файле сборки. Например, список значений в переменных HEADERS и SOURCES используется, чтобы сообщить qmake о заголовочных файлах и исходных файлах, которые находятся в том же каталоге, что и файл проекта.

Также переменные могут использоваться внутри файла проекта для хранения временного списка значений, а существующий список значений может быть перезаписан или расширен новыми значениями.

Следующая строка показывает, как переменной присваивается список значений:

 HEADERS = mainwindow.h paintwidget.h

Заметьте, что первое присваивание добавляет только те значения, которые определены в той же строке что и переменная SOURCES. Второе присваивание разделяет элементы на строки, используя символ \\.

Список значений переменной расширяется следующим образом:

 SOURCES = main.cpp mainwindow.cpp \
           paintwidget.cpp
 CONFIG += qt

Переменная CONFIG – это другая специальная переменная, которую qmake использует во время создания файла сборки. Она описана в разделе общие настройки (general configuration) далее в этой главе. В строчке выше значение qt добавлено в список существующих значений, содержащихся в переменной CONFIG.

Следующая таблица перечисляет переменные, которые распознает qmake, и описывает, что в них должно содержаться.

ПеременнаяОглавление
CONFIGОбщие параметры настройки проекта.
DESTDIRКаталог, в который будет помещен исполняемый или бинарный файл.
FORMSСписок .ui файлов, которые обработаны uic.
HEADERSСписок имен заголовочных файлов (.h), используемых при сборке проекта.
QTQt-ориентированные параметры конфигурации.
RESOURCESСписок файлов ресурсов (.rc), которые включаются в конечный проект. Для получения большей информации об этих файлах смотрите Система ресурсов Qt.
SOURCESСписок файлов с исходным кодом, которые используются при сборке проекта.
TEMPLATEШаблон, используемый в проекте. Он определяет, что будет на выходе процесса сборки: приложение, библиотека или подключаемый модуль.

Содержимое переменной может быть прочитано с помощью добавления префикса $$ к имени переменной. Это может быть использовано для того, чтобы присвоить содержимое одной переменной другой.

 TEMP_SOURCES = $$SOURCES

Оператор $$ в основном используется со встроенными функциями, которые работают со строками и списками значений. Это описано в главе Продвинутое использование qmake.

Как правило, переменные используются для хранения списков значений, разделенных пробельным символом (пробелы, символы горизонтальной и вертикальной табуляции и символы перевода строки). Тем не менее, иногда требуется указать значения, содержащие пробелы. Это можно сделать следующим образом:

 DEST = "Program Files"

Взятый в кавычки текст обрабатывается как один элемент в списке значений, хранящемся в переменной.

Комментарии

Вы можете добавлять комментарии в файл проекта. Комментарии начинаются с символа # и продолжаются до конца этой строки. Например:

 # Комментарии обычно начинаются с начала строки, но они
 # также могут продолжаться на следующей строке.

Чтобы включить символ # в значение переменной, необходимо использовать содержимое встроенной переменной LITERAL_HASH. Для получения более подробной информации смотрите справочник по переменным.

Встроенные функции и управляющая логика (программы)

qmake предоставляет множество встроенных функций, которые позволяют обрабатывать содержимое переменных. Самая распространенная функция в простых проектах – функция include, которая принимает имя файла в качестве аргумента. Содержимое переданного файла включается в файл проекта в то место, где была применена функция include. Функция include широко применяется для включения других файлов проекта:

 include(other.pro)

Поддержка условных структур доступна через области видимости (scopes), которые работают так же, как оператор if в языках программирования:

 win32 {
     SOURCES += paintwidget_win.cpp
 }

Присваивания внутри скобок выполняются только в том случае, если условие истинно. В данном случае, должна быть установлена специальная переменная win32; это происходит автоматически под Windows, но это так же может быть определено на других платформах, если запустить в командной строке qmake с опцией -win32 (для получения дополнительной информации смотрите Запуск qmake). Открывающая скобка обязательно должна находиться на той же строке, что и условие.

Простые циклы создаются с помощью перебора списка значений, используя встроенную функцию for. Следующий код добавляет каталоги в переменную SUBDIRS, но только в том случае, если они существуют:

 EXTRAS = handlers tests docs
 for(dir, EXTRAS) {
     exists($$dir) {
         SUBDIRS += $$dir
     }
 }

Более сложные операции с переменными, которые обычно требуют циклы, предоставляются встроенными функциями такими, как find, unique и count. Эти и многие другие функции обеспечивают управление строками и путями, поддерживают пользовательский ввод и вызывают внешние инструменты. Список доступных функций можно найти в главе Продвинутое использование qmake этого руководства.

Шаблоны проекта

Переменная TEMPLATE используется для определения типа проекта, который будет собран. Если это не указано в файле проекта, qmake допускает, что это будет приложение, и создает для этой цели соответствующий файл сборки (или эквивалентный файл).

Доступные типы проектов и информация о выходных файлах, которые создает qmake, перечислены в следующей таблице:

ШаблонОписание вывода qmake
app (по умолчанию)Создает make-файл для сборки приложения.
libСоздает make-файл для сборки библиотеки.
subdirsСоздает файл сборки, содержащий правила для подкаталогов, определенных в переменной SUBDIRS. Каждый подкаталог может содержать свой собственный файл проекта.
vcappСоздает файл проекта Visual Studio для сборки приложения.
vclibСоздает файл проекта Visual Studio для сборки библиотеки.

Смотрите Руководство по qmake для рекомендаций по написанию файлов проекта для проектов, которые используют шаблоны app и lib.

Когда используется шаблон subdirs, qmake создает файл сборки для проверки каждого подкаталога, обрабатывает каждый файл проекта, найденный в нем, и запускает инструмент сборки make на данной платформе для только что созданного файла сборки. Переменная SUBDIRS используется для хранения списка всех обрабатываемых подкаталогов.

Общие настройки

Переменная CONFIG определяет параметры и возможности, которые должен использовать компилятор, и библиотеки, с которыми будет идти компоновка. Всё должно быть учтено в переменной CONFIG, но стоит обратить внимание, что следующие опции общеприняты для qmake.

Следующие опции управляют флагами компилятора, которые используются для сборки проекта:

ОпцияОписание
releaseПроект должен быть собран в режиме релиза. Эта опция игнорируется, если также определен режим debug.
debugПроект должен быть собран в режиме отладки.
debug_and_releaseПроект собирается в обоих режимах (отладки и релиза).
build_allЕсли установлено debug_and_release, проект собирается в обоих режимах (отладки и релиза) по умолчанию.
orderedКогда используется шаблон subdirs, эта опция определяет порядок, в котором будут обрабатываться подкаталоги. Последовательность будет такой, в какой подкаталоги занесли в переменную.
warn_onКомпилятор должен выдать все возможные предупреждения. Эта опция игнорируется, если установлена опция warn_off.
warn_offКомпилятор должен вывести как можно меньше предупреждений.

Особенность опции debug_and_release заключается в том, что она позволяет собрать проект сразу в обеих версиях, отладки и релиза. В данном случае файл сборки, который 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). Более подробное описание можно посмотреть в разделе Области видимости в главе Продвинутое использование qmake этого руководства.

Следующие опции определяют тип проекта для сборки. Заметьте, что некоторые из этих опций имеют смысл, когда применяются на соответствующей платформе. На других платформах они ни на что не влияют.

ОпцияОписание
qtПроект – приложение Qt и должно компоноваться с библиотекой Qt. Вы можете использовать переменную QT для управления всеми дополнительными модулями Qt, которые требуются вашему приложению.
threadПроект – многопоточное приложение.
x11Проект – приложение или библиотека X11.

Для тонкой настройки процесса сборки могут применяться более специализированные опции конфигурации, которые используются в шаблонах проекта приложения или библиотеки. Детально это описано в главе Общие проекты данного руководства.

Например, если ваше приложение использует библиотеку Qt и вы хотите, чтобы оно было собрано как многопоточное приложение в режиме отладки debug, ваш файл проекта должен будет содержать следующую строку:

 CONFIG += qt thread debug

Заметьте, что вы должны использовать "+=",а не "=", или qmake не сможет использовать конфигурацию Qt для определения настроек, необходимых вашему проекту.

Объявление библиотек Qt

Если переменная CONFIG содержит значение qt, то qmake поддерживает приложения Qt. Это предоставляет возможность точно регулировать, какие модули Qt используются вашим приложением. Это достигается с помощью переменной QT, которая может использоваться для объявления требуемых дополнительных модулей. Например, нам доступны XML и сетевые модули следующим образом:

 CONFIG += qt
 QT += network xml

Заметьте, что QT включает по умолчанию модули ядра core и gui, поэтому строки выше добавляют сетевые и XML модули к списку по умолчанию. Следующие присвоение не включает модули по умолчанию, и приведет к ошибкам, когда исходный код приложения будет компилироваться:

 QT = network xml # не будут включены модули ядра и ГПИ.

Если вы хотите построить проект без модуля gui, вам необходимо исключить его с помощью оператора "-=". По умолчанию, QT содержит оба модуля, core и gui, поэтому результатом следующей строки будет минимальный проект Qt, который может быть собран:

 QT -= gui # будет использоваться только модуль ядра.

Таблица ниже показывает опции, которые могут быть использованы с переменной QT и свойства, которые ассоциируются с каждой позицией:

ОпцияСвойства
core (включено по умолчанию)модуль QtCore
gui (включено по умолчанию)модуль QtGui
networkмодуль QtNetwork
openglмодуль QtOpenGL
sqlмодуль QtSql
svgмодуль QtSvg
xmlмодуль QtXml
qt3supportмодуль Qt3Support

Заметьте, что добавление опции opengl в переменную QT автоматически приводит к добавлению эквивалентной опции в переменную CONFIG. По этой причине для приложений Qt необходимо добавлять опцию opengl и в переменную CONFIG и в QT.

Возможности конфигурации

qmake может быть установлен с расширенными функциями конфигурации, которые определены в файле функций (.prf). Эти дополнительные функции часто поддерживают специальные инструменты, которые используются в процессе построения. Чтобы добавить возможность в процесс сборки добавьте имя возможности (основу имени файла возможности) в переменную CONFIG.

Например, qmake может управлять процессом сборки, что используется внешними библиотеками, которые поддерживаются pkg-config, как, например, библиотеки D-Bus и ogg:

 CONFIG += link_pkgconfig
 PKGCONFIG += ogg dbus-1

Более подробную информацию о свойствах можно найти в разделе Добавление новых функций конфигурации главы Продвинутое использование qmake.

Объявление других библиотек

Если вы используете в вашем проекте не только библиотеки, поддерживаемые Qt, то вам нужно указать их в вашем файле проекта.

Каталоги, в которых qmake ищет библиотеки и специальные присоединяемые библиотеки, могут быть добавлены к списку значений переменной LIBS. Могут быть даны каталоги самих библиотек, или может использоваться обозначение в стиле Unix для определения библиотек и каталогов.

Например, следующие строки показывают, как может быть указана библиотека:

 LIBS += -L/usr/local/lib -lmath

Каталоги, содержащие заголовочные файлы, могут быть указаны аналогичным образом, используя переменную INCLUDEPATH.

Например, можно добавить несколько различных каталогов для поиска заголовочных файлов:

 INCLUDEPATH = c:/msdev/include d:/stl/include

[Предыдущая: Использование qmake] [Содержание] [Следующая: Запуск qmake]


Copyright © 2008 Trolltech Торговые марки
Qt 4.3.5