Evgenii Legotckoi
Evgenii Legotckoi16. Oktober 2015 12:25

Qt/C++ - Lektion 025. Erstellen von Projektdateien

Das Dateiprojekt enthält alle Informationen, die qmake benötigt, um Ihre Anwendung, Bibliothek oder Ihr Plugin zu erstellen. Grundsätzlich verwenden Sie eine Reihe von Deklarationen, um Ressourcen in einem Projekt anzugeben, aber die Unterstützung einfacher Programmierkonstrukte ermöglicht es Ihnen, verschiedene Buildprozesse für verschiedene Plattformen und Umgebungen zu beschreiben.

Elemente der Projektdatei

Das von qmake verwendete Projektdateiformat kann verwendet werden, um sowohl einfache als auch ziemlich komplexe Systeme zu unterstützen. Ein einfaches Dateiprojekt verwendet einen einfachen deklarativen Stil, der Variablen deklariert, um die Quell- und Headerdateien im Projekt zu identifizieren. Komplexe Projekte können Thread-Strukturen verwenden, um den Build-Prozess zu steuern.

Variablen

In einer Projektdatei werden Variablen verwendet, um eine Liste von Zeichenfolgen zu speichern. Im einfachsten Projekt informieren diese Variablen qmake über die zu verwendenden Einstellungsoptionen oder liefern die Dateinamen und Pfade, die während des Build-Prozesses verwendet werden sollen.

qmake sucht in jeder Projektdatei nach diesen Variablen und wird vom Inhalt verwendet, um zu bestimmen, was in das Makefile geschrieben werden soll. Zum Beispiel die Liste der Werte in den HEADERS und SOURCES Variablen werden verwendet, um qmake über die Quell- und Header-Dateien in einigen Verzeichnissen zu informieren.

Variablen können auch intern verwendet werden, um temporäre Wertelisten zu speichern, und bestehende Wertelisten können überschrieben oder mit neuen Werten angereichert werden.

Einer Variablen eine Werteliste zuweisen:

HEADERS = mainwindow.h paintwidget.h

Die Liste der Variablenwerte wird wie folgt erweitert:

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

Hinweis: Die erste Einstellung von Werten umfasst nur diejenigen Werte, die in derselben Zeile mit der Variable HEADERS angegeben sind. Die zweite Deklaration trennt die Werte wie in den * SOURCES * Variable, getrennt durch einen Backslash ("\").

Die Variable CONFIG ist eine weitere spezielle Variable, die von qmake verwendet wird, wenn das Makefile generiert wird.


Liste der Variablen

Nachfolgend finden Sie eine Liste der am häufigsten verwendeten Variablen und eine Beschreibung ihres Inhalts.

  • KONFIG - Grundlegende Projekteinstellungen
  • DESTDIR - Verzeichnis, in dem die binäre oder ausführbare Datei abgelegt wird
  • FORMS - Liste der UI-Dateien, die die Benutzeroberfläche implementieren
  • HEADERS - Liste der Namen der Header-Dateien (.h) und Pfade zu ihnen
  • QT - Liste der im Projekt verwendeten Qt-Module
  • RESSOURCEN - Liste der Ressourcendateien (.qrc), die im endgültigen Projekt enthalten sind.
  • SOURCES - Liste der Quellcodedateien, die beim Erstellen des Projekts verwendet werden.
  • VORLAGE - im Projekt verwendete Vorlage. Definiert, was das Projekt nach der Kompilierung, Anwendung, Bibliothek oder Plugin sein wird.

Der Inhalt von Variablen kann anderen Variablen zugewiesen werden, indem Sie die Namen anderer Variablen durch zwei $-Zeichen ersetzen.

Leerzeichen

Normalerweise werden Leerzeichen verwendet, um Werte in Variablen zu trennen. Um eine Variable anzugeben, deren Name ein Leerzeichen enthält, müssen Sie die Variable in Klammern setzen:

DEST = "Program Files"

In Klammern eingeschlossener Text zählt als ein Element in der Variablenliste. Eine ähnliche Vorgehensweise gilt auch in anderen Fällen. Wenn Sie beispielsweise Pfade zu Dateien angeben, die Leerzeichen enthalten:

win32:INCLUDEPATH += "C:/mylibs/extra headers"
unix:INCLUDEPATH += "/home/user/extra headers"

Bemerkungen

Normalerweise fügen Sie Ihren Projektdateien Kommentare hinzu. Kommentare beginnen mit # und werden bis zum Ende einer Zeile fortgesetzt.

# Comments usually start at the beginning of a line, but they
# can also follow other content on the same line.

Eingebaute Funktionen und Flusskontrolle

qmake bietet mehrere integrierte Funktionen zum Einbinden des Inhalts von Variablen. Eine häufig verwendete Funktion in einfachen Projekten ist die include () Funktion, die einen Dateinamen als Argument verwendet. Der Inhalt der Datei wird in das Projekt eingebunden, in dem die include-Funktion verwendet wurde Die include-Funktion wird normalerweise verwendet, um andere Projektdateien einzuschließen.

include(other.pro)

Die Unterstützung bedingter Strukturen stellt Bereiche zur Verfügung, die sich wie Deklarationen in einer Programmiersprache verhalten:

win32 {
    SOURCES += paintwidget_win.cpp
}

Die Zuweisung innerhalb der Klammern wird ausgeführt, wenn wahr. In diesem Fall muss im Parameter CONFIG win32 gesetzt werden. Dies geschieht in Windows automatisch. Die öffnende Klammer muss sich in derselben Zeile wie die Bedingung befinden.

Komplexere Operationen mit Variablen erfordern normalerweise Schleifen, die von integrierten Funktionen wie find(), unique(), count() bereitgestellt werden. Diese und viele andere Funktionen bieten String- und Pfadverwaltung mit Unterstützung für Eingabe und Aufruf externer Tools. ...

Projektvorlagen

Die Variable TEMPLATE wird verwendet, um den Typ des zu erstellenden Projekts zu deklarieren. Wenn es nicht in der Projektdatei deklariert ist, erstellt qmake das Projekt als Anwendung und generiert ein Makefile oder gleichwertiges.

Im Folgenden sind die verfügbaren Projekttypen zum Generieren von qmake und ihre Beschreibungen aufgeführt.

  • App (Standard) - Makefile wird in die Anwendung integriert
  • lib - Makefile baut in eine Bibliothek ein
  • aux - Das Makefile wird nicht gesammelt. Wird verwendet, wenn kein Compiler erforderlich ist, aber ein Ziel erstellt werden muss, beispielsweise wenn das Projekt in einer interpretierten Sprache geschrieben ist.
  • Unterverzeichnisse - Das Makefile enthält die Regeln für die Unterverzeichnisse, die mit der Variablen SUBDIRS angegeben werden Jedes Unterverzeichnis muss eine eigene Projektdatei enthalten.
  • vcapp - Visual Studio-Projektdatei zum Einbinden in die Anwendung
  • vclib - Visual Srudio-Projektdatei zum Einbinden in die Bibliothek
  • vcsubdirs - Visual Studio-Projektdatei zum Erstellen eines Projekts in Unterverzeichnissen

Wenn Unterverzeichnisse verwendet werden, generiert qmake ein Makefile für jedes Unterverzeichnis, führt alle gefundenen Projektdateien aus und führt das Make-Dienstprogramm auf dem neu erstellten Makefile aus. Die Variable SUBDIRS wird verwendet, um enthalten eine Liste aller Unterverzeichnisse, mit denen die Arbeit erledigt wird.

Grundkonfiguration

Die Variable CONFIG gibt die im Projekt auszuführenden Parameter und Funktionen an.

Ein Projekt kann im Debug-Modus und im Release-Modus oder in beiden erstellt werden. Werden Debug und Release gleichzeitig angegeben, dann wird letzteres wirksam. Wenn debug \ _und \ _release angegeben ist, werden beide Versionen des Projekts erstellt. Das von qmake generierte Makefile enthält eine Regel, die beide Versionen erstellt. Dies kann wie folgt erfolgen.

make all

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

Hinweis: Die Variable CONFIG kann auch Build-Bedingungen haben, wenn bestimmte Parameter zum Erstellen des Projekts verwendet werden oder nicht.

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

In diesem Fall sind verschiedene Konfigurationen für Debug- und Release-Builds enthalten.

Hinweis: Einige dieser Optionen werden nur wirksam, wenn sie mit der Build-Plattform übereinstimmen.

  • qt - Das Projekt ist eine Qt-Anwendung und muss mit der Qt-Bibliothek verknüpft werden. Sie müssen die QT-Variable verwenden, um das Hinzufügen von Qt-Modulen zu steuern, die zum Erstellen Ihrer Anwendung erforderlich sind. Dieser Wert wird standardmäßig hinzugefügt, Sie können ihn jedoch mit qmake für ein Nicht-Qt-Projekt entfernen.
  • x11 - Das Projekt ist eine x11-Anwendung oder Bibliothek. Dieser Wert ist nicht erforderlich, wenn das Ziel Qt ist.

Anwendungsvorlagen und Bibliotheken bieten Ihnen speziellere Einstellungen für den Buildprozess. Wenn Ihre Anwendung beispielsweise die Qt-Bibliothek verwendet und Sie im Debug-Modus erstellen möchten, sollte Ihr Projekt die folgende Zeile enthalten:

CONFIG += qt debug

Hinweis: Sie müssen "+ =" und nicht "=" verwenden, sonst fügt qmake nicht mit den Qt-Einstellungen hinzu.

Qt-Bibliotheken deklarieren

Wenn die Variable CONFIG den Wert qt enthält, wird die qmake-Unterstützung für Qt-Anwendungen aktiviert. Dadurch kann bestimmt werden, welche Qt-Module in einer Anwendung verwendet werden. Dies hat den Vorteil, dass über die Variable QT nur die benötigten Bibliotheken und Module deklariert werden können. Beispielsweise können wir die Module XML und network wie folgt aktivieren:

QT += network xml

Hinweis: QT beinhaltet standardmäßig die core und gui Module, sowie die XML und Netzwerkmodule Folgende Zuordnungsart von Modulen zu einer Variablen enthält nicht core und gui und führt zu Kompilierungsfehlern.

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

Wenn Sie ein Projekt ohne das gui-Modul erstellen möchten, müssen Sie es mit dem folgenden "-="-Operator ausschließen.

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

Anpassungsfunktionen

qmake kann auf erweiterte Anpassungsfunktionen eingestellt werden, die in den .prf-Dateien angegeben werden. Diese erweiterten Funktionen bieten oft Unterstützung für benutzerdefinierte Tools während des Buildprozesses. Um Funktionen für den Build-Prozess hinzuzufügen, fügen Sie den Funktionsnamen zur Variable CONFIG. hinzu

Zum Beispiel kann qmake so konfiguriert werden, dass es mit externen Bibliotheken erstellt wird, die pkg-config unterstützen, wie zum Beispiel D-Bus und ogg Bibliotheken.

CONFIG += link_pkgconfig
PKGCONFIG += ogg dbus-1

Andere Bibliotheken deklarieren

Wenn Sie in Ihrem Projekt neben Qt-Modulen andere Bibliotheken verwenden, müssen Sie diese in der Projektdatei angeben.

Die Pfade, die qmake nach Bibliotheken sucht, werden in der LIBS-Variablen angegeben. Sie können den Pfad zur Bibliothek im Unix-Stil angeben.

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

Auf ähnliche Weise können auch Pfade mit Header-Dateien mit der Variable INCLUDEPATH angegeben werden

INCLUDEPATH = c:/msdev/include d:/stl/include
Рекомендуємо хостинг TIMEWEB
Рекомендуємо хостинг TIMEWEB
Stabiles Hosting des sozialen Netzwerks EVILEG. Wir empfehlen VDS-Hosting für Django-Projekte.

Magst du es? In sozialen Netzwerken teilen!

alex_lip
  • 31. Januar 2018 00:56

В главе

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

Evgenii Legotckoi
  • 31. Januar 2018 03:51

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

d
  • 3. September 2018 09:07

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

Evgenii Legotckoi
  • 5. September 2018 03:59

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

В данном случае нужно перезапустить qmake и лучше сделать чистую сборку
d
  • 14. September 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. September 2018 06:29

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

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

Kommentare

Nur autorisierte Benutzer können Kommentare posten.
Bitte Anmelden oder Registrieren
Letzte Kommentare
ИМ
Игорь Максимов5. Oktober 2024 07:51
Django – Lektion 064. So schreiben Sie eine Python-Markdown-Erweiterung Приветствую Евгений! У меня вопрос. Можно ли вставлять свои классы в разметку редактора markdown? Допустим имея стандартную разметку: <ul> <li></li> <li></l…
d
dblas55. Juli 2024 11:02
QML - Lektion 016. SQLite-Datenbank und das Arbeiten damit in QML Qt Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
k
kmssr8. Februar 2024 18:43
Qt Linux - Lektion 001. Autorun Qt-Anwendung unter Linux как сделать автозапуск для флэтпака, который не даёт создавать файлы в ~/.config - вот это вопрос ))
Qt WinAPI - Lektion 007. Arbeiten mit ICMP-Ping in Qt Без строки #include <QRegularExpressionValidator> в заголовочном файле не работает валидатор.
EVA
EVA25. Dezember 2023 10:30
Boost - statisches Verknüpfen im CMake-Projekt unter Windows Ошибка LNK1104 часто возникает, когда компоновщик не может найти или открыть файл библиотеки. В вашем случае, это файл libboost_locale-vc142-mt-gd-x64-1_74.lib из библиотеки Boost для C+…
Jetzt im Forum diskutieren
J
JacobFib17. Oktober 2024 03:27
добавить qlineseries в функции Пользователь может получить любые разъяснения по интересующим вопросам, касающимся обработки его персональных данных, обратившись к Оператору с помощью электронной почты https://topdecorpro.ru…
JW
Jhon Wick1. Oktober 2024 15:52
Indian Food Restaurant In Columbus OH| Layla’s Kitchen Indian Restaurant If you're looking for a truly authentic https://www.laylaskitchenrestaurantohio.com/ , Layla’s Kitchen Indian Restaurant is your go-to destination. Located at 6152 Cleveland Ave, Colu…
КГ
Кирилл Гусарев27. September 2024 09:09
Не запускается программа на Qt: точка входа в процедуру не найдена в библиотеке DLL Написал программу на C++ Qt в Qt Creator, сбилдил Release с помощью MinGW 64-bit, бинарнику напихал dll-ки с помощью windeployqt.exe. При попытке запуска моей сбилженной программы выдаёт три оши…
F
Fynjy22. Juli 2024 04:15
при создании qml проекта Kits есть но недоступны для выбора Поставил Qt Creator 11.0.2. Qt 6.4.3 При создании проекта Qml не могу выбрать Kits, они все недоступны, хотя настроены и при создании обычного Qt Widget приложения их можно выбрать. В чем может …

Folgen Sie uns in sozialen Netzwerken