Реклама

Qt/C++ - Урок 025. Создание проекта файлов для сборки утилитой qmake

TutorialQtconfig, headers, libs, qmake, qt, qt5, sources533

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

Список переменных

Далее представлен список наиболее часто используемых переменных и описание их содержания.

  • CONFIG - Основные параметры настройки проекта
  • DESTDIR - Директория, в которую будет помещён бинарник или исполняемый файл
  • FORMS - Список UI файлов, которые реализуют пользовательский интерфейс
  • HEADERS - Список имён заголовочных файлов (.h) и путей к ним
  • QT - Список модулей Qt, используемых в проекте
  • RESOURCES - список ресурсный файлов (.qrc), включаемых в финальный проект.
  • SOURCES - список файлов исходных кодов, которые используются при сборке проекта.
  • TEMPLATE - шаблон, используемый в проекте. Определяет то, чем будет проект после компиляции, приложением, библиотекой или плагином.

Содержимое переменных может быть присвоено другим переменным с помощью подстановки двух знаков  $ перед именем других переменных.

Пробелы

Обычно, пробелы разделяют значения в переменных. Для указания переменной, содержащей в своём имени пробел, вы должны заключить переменную в скобки:

DEST = "Program Files"

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

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.

Встроенные функции и управление потоком

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

include(other.pro)

Поддержка условных структур делает доступным области, которые ведут себя, как если бы они были объявления в языке программирования:

win32 {
    SOURCES += paintwidget_win.cpp
}

Назначение внутри скобок будет выполнено если является верным. В этом случае, win32 должна быть установлена в параметре CONFIG . Это происходит автоматически в Windows. Открывающаяся скобка должна стоять на одной строке с условием.

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

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

Переменная TEMPLATE используется для объявления типа проекта, который будет собран. Если он не декларирован в проектном файле, то qmake соберёт проект как приложение и генерирует Makefile или эквивалентный.

Далее представлены типы проектов, доступные для генерации qmake и их описания.

  • app (по умолчанию) - Makefile собирается в приложение
  • lib - Makefile собирается в библиотеку
  • aux - Makefile ни во что не собирается. Используется если не требуется компилятор, но требуется создать цель, например, если проект написан на интерпретируемом языке.
  • subdirs - Makefile содержит правила для поддиректорий указанных с использованием переменной SUBDIRS. Каждая поддиректория должна содержать свой собственный файл проекта.
  • vcapp - Visual Studio Project file для сборки в приложение
  • vclib - Visual Srudio Project file для сборки в библиотеку
  • vcsubdirs - Visual Studio Project file для сборки проекта в поддиректориях

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

Основная конфигурация

Переменная CONFIG указывает параметры и функции, которые должны быть выполнены в проекте.

Проект может быть собран в режиме отладки и выпуска, или в обоих. Если отладка и выпуску указаны одновременно, то в силу вступает последний. Если указано debug_and_release, собираются обе версии проекта. Makefile, который генерируется qmake включает правило, которое собирает обе версии. Это может быть выполнено следующим образом.

make all

Добавление build_all в переменную CONFIG создаёт правило по умолчанию, когда собирается проект.

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

CONFIG(opengl) {
    message(Building with OpenGL support.)
} else {
    message(OpenGL support is not available.)
}

В данном случае включаются различные конфигурации для сборок отладки и выпуска.

Примечание. Некоторые из этих параметров получают эффект только в случае соответствия платформе сборки.

  • 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 и network следующим образом:

QT += network xml

Примечание. QT включает модули core и gui по умолчанию, также как и модули XML и network. Следующий тип присвоения модулей переменной не включает core и gui и приведёт к ошибкам при компиляции.

QT = network xml # This will omit the core and gui modules.

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

QT -= gui # Only the core module is used.

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

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

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

CONFIG += link_pkgconfig
PKGCONFIG += ogg dbus-1

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

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

Пути, по которым qmake ищет библиотеки указываются в переменной LIBS. Вы можете указывать путь к библиотеке, используя Unix-style.

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

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

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

@

Реклама

Реклама

Комментарии

Комментарии

Только авторизованные пользователи могут оставлять комментарии.
Пожалуйста, Авторизуйтесь или Зарегистрируйтесь

Реклама

Реклама