Evgenii Legotckoi
Evgenii Legotckoi16 жовтня 2015 р. 12:25

Qt/C++ - Урок 025. Створення файлів проекту

Проект файлів містить всю інформацію, потрібну 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
Рекомендуємо хостинг TIMEWEB
Рекомендуємо хостинг TIMEWEB
Стабільний хостинг, на якому розміщується соціальна мережа EVILEG. Для проектів на Django радимо VDS хостинг.

Вам це подобається? Поділіться в соціальних мережах!

alex_lip
  • 31 січня 2018 р. 00:56

В главе

Объявление Qt библиотек - "Это желает возможным определять" - видимо опечатка -  "делает"

Evgenii Legotckoi
  • 31 січня 2018 р. 03:51

Да, спасибо. Опечатка, вернее невнимательно работал с переводом.

d
  • 03 вересня 2018 р. 09:07

а можно как-то исключить xml и network? потому как QT -= network не помогает и сборка все-равно идет с модулем network

Evgenii Legotckoi
  • 05 вересня 2018 р. 03:59

Вы перезапускали qmake после добавленияQT -=xml network?

В данном случае нужно перезапустить qmake и лучше сделать чистую сборку
d
  • 14 вересня 2018 р. 05:48

добавляю 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 он сам еще и сеть подключает, даже и не знаю

Evgenii Legotckoi
  • 15 вересня 2018 р. 06:29

Как вариант, для SerialPort может использоваться внутренняя петля, loopback. Может поэтому и тянет с собой эти зависимости. Но это можно проверить, если запустить без этих библиотек собранный проект.

Есть ещё такая мысль, что это может быть багом. У нас на работе когда билд собирается, тоже тянет библиотеки, которые по идее не должны там присутствовать, например, тот же самый Qml, поскольку мы его не используем. Но если учесть, что сам софт занимает пару гигабайт, то пара лишних библиотек на пару десятков мегабайт уже никого не волнует.

Коментарі

Only authorized users can post comments.
Please, Log in or Sign up
AD

C++ - Тест 004. Указатели, Массивы и Циклы

  • Результат:50бали,
  • Рейтинг балів-4
m
  • molni99
  • 26 жовтня 2024 р. 01:37

C++ - Тест 004. Указатели, Массивы и Циклы

  • Результат:80бали,
  • Рейтинг балів4
m
  • molni99
  • 26 жовтня 2024 р. 01:29

C++ - Тест 004. Указатели, Массивы и Циклы

  • Результат:20бали,
  • Рейтинг балів-10
Останні коментарі
ИМ
Игорь Максимов22 листопада 2024 р. 11:51
Django - Підручник 017. Налаштуйте сторінку входу до Django Добрый вечер Евгений! Я сделал себе авторизацию аналогичную вашей, все работает, кроме возврата к предидущей странице. Редеректит всегда на главную, хотя в логах сервера вижу запросы на правильн…
Evgenii Legotckoi
Evgenii Legotckoi31 жовтня 2024 р. 14:37
Django - Урок 064. Як написати розширення для Python Markdown Добрый день. Да, можно. Либо через такие же плагины, либо с постобработкой через python библиотеку Beautiful Soup
A
ALO1ZE19 жовтня 2024 р. 08:19
Читалка файлів fb3 на Qt Creator Подскажите как это запустить? Я не шарю в программировании и кодинге. Скачал и установаил Qt, но куча ошибок выдается и не запустить. А очень надо fb3 переконвертировать в html
ИМ
Игорь Максимов05 жовтня 2024 р. 07:51
Django - Урок 064. Як написати розширення для Python Markdown Приветствую Евгений! У меня вопрос. Можно ли вставлять свои классы в разметку редактора markdown? Допустим имея стандартную разметку: <ul> <li></li> <li></l…
d
dblas505 липня 2024 р. 11:02
QML - Урок 016. База даних SQLite та робота з нею в QML Qt Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
Тепер обговоріть на форумі
Evgenii Legotckoi
Evgenii Legotckoi24 червня 2024 р. 15:11
добавить qlineseries в функции Я тут. Работы оень много. Отправил его в бан.
t
tonypeachey115 листопада 2024 р. 06:04
google domain [url=https://google.com/]domain[/url] domain [http://www.example.com link title]
NSProject
NSProject04 червня 2022 р. 03:49
Всё ещё разбираюсь с кешем. В следствии прочтения данной статьи. Я принял для себя решение сделать кеширование свойств менеджера модели LikeDislike. И так как установка evileg_core для меня не была возможна, ибо он писался…
9
9Anonim25 жовтня 2024 р. 09:10
Машина тьюринга // Начальное состояние 0 0, ,<,1 // Переход в состояние 1 при пустом символе 0,0,>,0 // Остаемся в состоянии 0, двигаясь вправо при встрече 0 0,1,>…

Слідкуйте за нами в соціальних мережах