Qt:Документация 4.3.2/qmake-project-files

Материал из Wiki.crossplatform.ru

Версия от 10:23, 29 января 2009; Root (Обсуждение | вклад)
(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к: навигация, поиск
40px Внимание: Актуальная версия перевода документации находится здесь

__NOTOC__

Image:qt-logo.png

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

Image:trolltech-logo.png

[Предыдущая: Использование 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), используемых для компоновки проекта.
QT Qt-ориентированная конфигурациа опций.
RESOURCES Список файлов ресурсов (.rc), которые включены в конечный проект. Для получения большей информации об этих файлах смотрите Система ресурсов Qt.
SOURCES Список файлов с исходным кодом, которые используются для компоновки проекта.
TEMPLATE Шаблон, используемый в проекте. Он определяет, что будет на выходе процесса компоновки: приложение, библиотека или дополнительный программный модуль (plugin).

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

 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 (default) Создает файл сборки для компоновки библиотеки.
lib Создает файл сборки для компоновки библиотеки.
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). Более подробное описание можно посмотреть в разделе Области действия (Scopes) в главе Продвинутое использование qmake этого руководства.

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


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

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

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

 CONFIG += qt thread debug

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

[править] Объявление библиотек QT

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

 CONFIG += qt
 QT += network xml

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

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

Если вы хотите построить проект без модуля 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 © 2007 Trolltech Trademarks
Qt 4.3.2