Проект файлів містить всю інформацію, потрібну 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
В главе
Объявление Qt библиотек - "Это желает возможным определять" - видимо опечатка - "делает"
Да, спасибо. Опечатка, вернее невнимательно работал с переводом.
а можно как-то исключить xml и network? потому как QT -= network не помогает и сборка все-равно идет с модулем network
Вы перезапускали qmake после добавленияQT -=xml network?
добавляю QT -= xml network в файл проекта .pro
# make clean
# rm .qmake.stash Makefile
# qmake
# make
И все-равно в параметрах arm-linux-gnueabihf-g++ имеет место быть -lQt5Quick -lQt5Gui -lQt5Qml -lQt5SerialPort -lQt5Core -lGLESv2 -lpthread
В 5.9 такого не было, возможно в 5.11 при использовании Serialport он сам еще и сеть подключает, даже и не знаю
Как вариант, для SerialPort может использоваться внутренняя петля, loopback. Может поэтому и тянет с собой эти зависимости. Но это можно проверить, если запустить без этих библиотек собранный проект.
Есть ещё такая мысль, что это может быть багом. У нас на работе когда билд собирается, тоже тянет библиотеки, которые по идее не должны там присутствовать, например, тот же самый Qml, поскольку мы его не используем. Но если учесть, что сам софт занимает пару гигабайт, то пара лишних библиотек на пару десятков мегабайт уже никого не волнует.