Erstellen von Projektdateien

Projektdateien enthalten alle Informationen, die von qmake benötigt werden, um Ihre Anwendung, Bibliothek oder Ihr Plugin zu bauen. Im Allgemeinen verwenden Sie eine Reihe von Deklarationen, um die Ressourcen im Projekt zu spezifizieren, aber die Unterstützung von einfachen Programmierkonstrukten ermöglicht es Ihnen, verschiedene Build-Prozesse für unterschiedliche Plattformen und Umgebungen zu beschreiben.

Elemente der Projektdatei

Das von qmake verwendete Projektdateiformat kann sowohl für einfache als auch für recht komplexe Build-Systeme verwendet werden. Einfache Projektdateien verwenden einen einfachen deklarativen Stil und definieren Standardvariablen, um die im Projekt verwendeten Quell- und Headerdateien anzugeben. Komplexe Projekte können Kontrollflussstrukturen zur Feinabstimmung des Build-Prozesses verwenden.

In den folgenden Abschnitten werden die verschiedenen Arten von Elementen beschrieben, die in Projektdateien verwendet werden.

Variablen

In einer Projektdatei werden Variablen verwendet, um Listen von Zeichenketten zu speichern. In den einfachsten Projekten informieren diese Variablen qmake über die zu verwendenden Konfigurationsoptionen oder liefern Dateinamen und Pfade, die im Build-Prozess verwendet werden sollen.

qmake sucht in jeder Projektdatei nach bestimmten Variablen und verwendet den Inhalt dieser Variablen, um zu bestimmen, was es in ein Makefile schreiben soll. Zum Beispiel werden die Wertelisten der Variablen HEADERS und SOURCES verwendet, um qmake über Header- und Quelldateien im gleichen Verzeichnis wie die Projektdatei 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 erweitert werden.

Der folgende Ausschnitt veranschaulicht, wie Wertelisten zu Variablen zugewiesen werden:

HEADERS = mainwindow.h paintwidget.h

Die Liste der Werte in einer Variablen wird auf folgende Weise erweitert:

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

Hinweis: Die erste Zuweisung umfasst nur Werte, die in der gleichen Zeile wie die Variable HEADERS angegeben sind. Bei der zweiten Zuweisung werden die Werte in der Variablen SOURCES durch einen Backslash (\) auf mehrere Zeilen aufgeteilt.

Die CONFIG-Variable ist eine weitere spezielle Variable, die qmake bei der Erzeugung eines Makefiles verwendet. Sie wird in Allgemeine Konfiguration besprochen. In dem obigen Ausschnitt wird console der Liste der bestehenden Werte in CONFIG hinzugefügt.

Die folgende Tabelle listet einige häufig verwendete Variablen auf und beschreibt ihren Inhalt. Eine vollständige Liste der Variablen und ihrer Beschreibungen finden Sie unter Variablen.

VariableInhalt
CONFIGAllgemeine Projektkonfigurationsoptionen.
DESTDIRDas Verzeichnis, in dem die ausführbare Datei oder die Binärdatei gespeichert werden soll.
FORMSEine Liste von UI-Dateien, die vom User Interface Compiler (uic) verarbeitet werden sollen.
HEADERSEine Liste von Dateinamen von Header-Dateien (.h), die beim Erstellen des Projekts verwendet werden.
QTEine Liste der im Projekt verwendeten Qt-Module.
RESSOURCENEine Liste der Ressourcendateien (.qrc), die in das endgültige Projekt aufgenommen werden sollen. Siehe The Qt Resource System für weitere Informationen über diese Dateien.
SOURCESEine Liste der Quellcodedateien, die beim Erstellen des Projekts verwendet werden sollen.
TEMPLATEDie für das Projekt zu verwendende Vorlage. Dies bestimmt, ob die Ausgabe des Build-Prozesses eine Anwendung, eine Bibliothek oder ein Plugin sein wird.

Der Inhalt einer Variablen kann gelesen werden, indem dem Variablennamen $$ vorangestellt wird. Dies kann verwendet werden, um den Inhalt einer Variablen einer anderen zuzuweisen:

TEMP_SOURCES = $$SOURCES

Der $$ Operator wird ausgiebig mit eingebauten Funktionen verwendet, die mit Strings und Listen von Werten arbeiten. Für weitere Informationen siehe qmake Language.

Whitespace

Normalerweise werden Werte in Variablenzuweisungen durch Leerzeichen getrennt. Um Werte anzugeben, die Leerzeichen enthalten, müssen Sie die Werte in doppelte Anführungszeichen einschließen:

DEST = "Program Files"

Der in Anführungszeichen gesetzte Text wird in der Liste der Werte, die die Variable enthält, als ein einzelnes Element behandelt. Ein ähnlicher Ansatz wird verwendet, um mit Pfaden umzugehen, die Leerzeichen enthalten, insbesondere bei der Definition der Variablen INCLUDEPATH und LIBS für die Windows-Plattform:

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

Kommentare

Sie können den Projektdateien Kommentare hinzufügen. Kommentare beginnen mit dem Zeichen # und werden bis zum Ende der gleichen Zeile fortgesetzt. Ein Beispiel:

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

Um das Zeichen # in Variablenzuweisungen einzubeziehen, ist es notwendig, den Inhalt der eingebauten Variable LITERAL_HASH zu verwenden.

Eingebaute Funktionen und Kontrollfluss

qmake stellt eine Reihe von eingebauten Funktionen zur Verfügung, mit denen der Inhalt von Variablen verarbeitet werden kann. Die in einfachen Projektdateien am häufigsten verwendete Funktion ist die include() -Funktion, die einen Dateinamen als Argument annimmt. Der Inhalt der angegebenen Datei wird in die Projektdatei an der Stelle eingefügt, an der die Funktion include verwendet wird. Die Funktion include wird am häufigsten verwendet, um andere Projektdateien einzubinden:

include(other.pro)

Die Unterstützung für bedingte Strukturen wird über Scopes zur Verfügung gestellt, die sich wie if Anweisungen in Programmiersprachen verhalten:

win32 {
    SOURCES += paintwidget_win.cpp
}

Die Zuweisungen innerhalb der geschweiften Klammern werden nur vorgenommen, wenn die Bedingung wahr ist. In diesem Fall muss die Option win32 CONFIG gesetzt werden. Unter Windows geschieht dies automatisch. Die öffnende geschweifte Klammer muss in der gleichen Zeile wie die Bedingung stehen.

Komplexere Operationen mit Variablen, die normalerweise Schleifen erfordern würden, werden durch eingebaute Funktionen wie find(), unique() und count() ermöglicht. Diese und viele andere Funktionen dienen zur Bearbeitung von Zeichenketten und Pfaden, zur Unterstützung von Benutzereingaben und zum Aufrufen externer Tools. Weitere Informationen über die Verwendung der Funktionen finden Sie unter qmake Language. Eine Liste aller Funktionen und deren Beschreibungen finden Sie unter Ersetzungsfunktionen und Testfunktionen.

Projektvorlagen

Die Variable TEMPLATE wird verwendet, um den Typ des zu erstellenden Projekts zu definieren. Wenn sie nicht in der Projektdatei deklariert ist, geht qmake davon aus, dass eine Anwendung gebaut werden soll, und generiert ein entsprechendes Makefile (oder eine gleichwertige Datei) für diesen Zweck.

Die folgende Tabelle fasst die verfügbaren Projekttypen zusammen und beschreibt die Dateien, die qmake für jeden von ihnen erzeugt:

Vorlageqmake Ausgabe
app (Vorgabe)Makefile zum Erstellen einer Anwendung.
libMakefile zum Erstellen einer Bibliothek.
auxMakefile, um nichts zu bauen. Verwenden Sie dies, wenn kein Compiler aufgerufen werden muss, um das Ziel zu erstellen, zum Beispiel weil Ihr Projekt in einer interpretierten Sprache geschrieben ist.

Hinweis: Dieser Vorlagentyp ist nur für Makefile-basierte Generatoren verfügbar. Insbesondere funktioniert er nicht mit den vcxproj- und Xcode-Generatoren.

UnterverzeichnisseMakefile, das Regeln für die Unterverzeichnisse enthält, die mit der Variablen SUBDIRS angegeben werden. Jedes Unterverzeichnis muss seine eigene Projektdatei enthalten.
vcappVisual Studio Projektdatei zur Erstellung einer Anwendung.
vclibVisual-Studio-Projektdatei zur Erstellung einer Bibliothek.
vcsubdirsVisual Studio Solution-Datei zum Erstellen von Projekten in Unterverzeichnissen.

Siehe Erstellen allgemeiner Projekttypen für Hinweise zum Schreiben von Projektdateien für Projekte, die die Vorlagen app und lib verwenden.

Wenn das subdirs Template verwendet wird, generiert qmake ein Makefile, um jedes angegebene Unterverzeichnis zu untersuchen, jede dort gefundene Projektdatei zu verarbeiten und das make Tool der Plattform auf dem neu erstellten Makefile auszuführen. Die Variable SUBDIRS wird verwendet, um eine Liste aller zu verarbeitenden Unterverzeichnisse zu enthalten.

Allgemeine Konfiguration

Die CONFIG-Variable gibt die Optionen und Funktionen an, mit denen das Projekt konfiguriert werden soll.

Das Projekt kann im Release-Modus, im Debug-Modus oder in beiden Modi erstellt werden. Wenn sowohl Debug- als auch Release-Modus angegeben sind, gilt die zuletzt genannte Option. Wenn Sie die Option debug_and_release angeben, um sowohl die Debug- als auch die Release-Version eines Projekts zu bauen, enthält das Makefile, das qmake erzeugt, eine Regel, die beide Versionen baut. Diese kann auf folgende Weise aufgerufen werden:

make all

Durch Hinzufügen der Option build_all zur Variable CONFIG wird diese Regel zur Vorgabe beim Bauen des Projekts.

Hinweis: Jede der in der Variable CONFIG angegebenen Optionen kann auch als Bereichsbedingung verwendet werden. Sie können mit der eingebauten Funktion CONFIG() auf das Vorhandensein bestimmter Konfigurationsoptionen testen. In den folgenden Zeilen wird die Funktion beispielsweise als Bedingung in einem Bereich verwendet, um zu prüfen, ob nur die Option opengl verwendet wird:

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

Dadurch können unterschiedliche Konfigurationen für release und debug Builds definiert werden. Weitere Informationen finden Sie unter Verwenden von Scopes.

Die folgenden Optionen definieren den Typ des zu erstellenden Projekts.

Hinweis: Einige dieser Optionen werden nur wirksam, wenn sie auf der entsprechenden Plattform verwendet werden.

OptionBeschreibung
qtDas Projekt ist eine Qt-Anwendung und soll mit der Qt-Bibliothek gelinkt werden. Sie können die Variable QT verwenden, um alle zusätzlichen Qt-Module zu steuern, die für Ihre Anwendung erforderlich sind. Dieser Wert wird standardmäßig hinzugefügt, aber Sie können ihn entfernen, um qmake für ein Nicht-Qt-Projekt zu verwenden.
x11Das Projekt ist eine X11-Anwendung oder -Bibliothek. Dieser Wert wird nicht benötigt, wenn das Ziel Qt verwendet.

Die Vorlagen für Anwendungs- und Bibliotheksprojekte bieten Ihnen speziellere Konfigurationsoptionen zur Feinabstimmung des Erstellungsprozesses. Die Optionen werden im Detail in Allgemeine Projekttypen erstellen erläutert.

Wenn Ihre Anwendung beispielsweise die Qt-Bibliothek verwendet und Sie sie im Modus debug erstellen möchten, wird Ihre Projektdatei die folgende Zeile enthalten:

CONFIG += qt debug

Hinweis: Sie müssen "+=" und nicht "=" verwenden, da qmake sonst nicht in der Lage ist, die Qt-Konfiguration zu verwenden, um die für Ihr Projekt benötigten Einstellungen zu ermitteln.

Deklarieren von Qt-Bibliotheken

Wenn die CONFIG-Variable den Wert qt enthält, ist qmake's Unterstützung für Qt-Anwendungen aktiviert. Dies ermöglicht eine Feinabstimmung, welche der Qt-Module von Ihrer Anwendung verwendet werden. Dies wird durch die QT-Variable erreicht, die verwendet werden kann, um die benötigten Erweiterungsmodule zu deklarieren. Zum Beispiel können wir die XML- und Netzwerkmodule auf folgende Weise aktivieren:

QT += network xml

Hinweis: QT enthält standardmäßig die Module core und gui, so dass die obige Deklaration die Netzwerk- und XML-Module zu dieser Standardliste hinzufügt. Die folgende Zuweisung lässt die Standardmodule weg und führt zu Fehlern, wenn der Quellcode der Anwendung kompiliert wird:

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

Wenn Sie ein Projekt ohne das Modul gui erstellen möchten, müssen Sie es mit dem Operator "-=" ausschließen. Standardmäßig enthält QT sowohl core als auch gui, so dass die folgende Zeile dazu führt, dass ein minimales Qt-Projekt erstellt wird:

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

Eine Liste der Qt-Module, die Sie der Variable QT hinzufügen können, finden Sie unter QT.

Konfigurationsmöglichkeiten

qmake kann mit zusätzlichen Konfigurationsfunktionen eingerichtet werden, die in Feature-Dateien (.prf) angegeben werden. Diese zusätzlichen Funktionen bieten oft Unterstützung für eigene Werkzeuge, die während des Build-Prozesses verwendet werden. Um ein Feature zum Erstellungsprozess hinzuzufügen, hängen Sie den Feature-Namen (den Stamm des Feature-Dateinamens) an die Variable CONFIG an.

Zum Beispiel kann qmake den Build-Prozess so konfigurieren, dass externe Bibliotheken, die von pkg-config unterstützt werden, wie die D-Bus und ogg Bibliotheken, mit den folgenden Zeilen genutzt werden:

CONFIG += link_pkgconfig
PKGCONFIG += ogg dbus-1

Weitere Informationen über das Hinzufügen von Funktionen finden Sie unter Hinzufügen neuer Konfigurationsfunktionen.

Andere Bibliotheken deklarieren

Wenn Sie in Ihrem Projekt zusätzlich zu den mit Qt mitgelieferten Bibliotheken weitere Bibliotheken verwenden, müssen Sie diese in Ihrer Projektdatei angeben.

Die Pfade, die qmake nach Bibliotheken durchsucht und die spezifischen Bibliotheken, gegen die gelinkt werden soll, können der Liste der Werte in der LIBS-Variable hinzugefügt werden. Sie können die Pfade zu den Bibliotheken angeben oder die Unix-ähnliche Notation für die Angabe von Bibliotheken und Pfaden verwenden.

Die folgenden Zeilen zeigen zum Beispiel, wie eine Bibliothek angegeben werden kann:

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

Die Pfade, die Header-Dateien enthalten, können auf ähnliche Weise mit der INCLUDEPATH-Variable angegeben werden.

Zum Beispiel, um mehrere Pfade hinzuzufügen, die nach Header-Dateien durchsucht werden sollen:

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

© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.