Verwendung vorkompilierter Header
Vorkompilierte Header (PCH) sind eine von einigen Compilern unterstützte Leistungsfunktion, mit der ein stabiler Codeabschnitt kompiliert und der kompilierte Zustand des Codes in einer Binärdatei gespeichert wird. Bei nachfolgenden Kompilierungen lädt der Compiler den gespeicherten Zustand und setzt die Kompilierung der angegebenen Datei fort. Jede nachfolgende Kompilierung ist schneller, da der stabile Code nicht erneut kompiliert werden muss.
qmake unterstützt die Verwendung vorkompilierter Header auf einigen Plattformen und in bestimmten Build-Umgebungen, darunter:
- Windows
- nmake
- Visual Studio-Projekte (VS 2008 und höher)
- macOS, iOS, tvOS und watchOS
- Makefile
- Xcode
- Unix
- GCC 3.4 und höher
- clang
Hinzufügen von vorkompilierten Headern zu Ihrem Projekt
Der vorkompilierte Header muss Code enthalten, der in Ihrem gesamten Projekt stabil und statisch ist. Ein typischer vorkompilierter Header könnte wie folgt aussehen:
// Add C includes here
#if defined __cplusplus
// Add C++ includes here
#include <stdlib>
#include <iostream>
#include <vector>
#include <QApplication> // Qt includes
#include <QPushButton>
#include <QLabel>
#include "thirdparty/include/libmain.h"
#include "my_stable_class.h"
...
#endifHinweis: In einer vorkompilierten Header-Datei müssen C-Includes von C++-Includes getrennt werden, da die vorkompilierte Header-Datei für C-Dateien keinen C++-Code enthalten darf.
Projektoptionen
Damit Ihr Projekt vorkompilierte Header verwendet, müssen Sie lediglich die Variable PRECOMPILED_HEADER in Ihrer Projektdatei definieren:
PRECOMPILED_HEADER = stable.hqmake übernimmt den Rest, um die Erstellung und Verwendung der vorkompilierten Header-Datei sicherzustellen. Sie müssen die vorkompilierte Header-Datei nicht in ` HEADERS` einbinden, da qmake dies übernimmt, sofern die Konfiguration vorkompilierte Header unterstützt.
Die MSVC- und g++-Spezifikationen für Windows aktivieren „ precompile_header “ standardmäßig.
Mit dieser Option können Sie bedingte Blöcke in Ihrer Projektdatei auslösen, um Einstellungen bei der Verwendung vorkompilierter Header hinzuzufügen. Zum Beispiel:
precompile_header:!isEmpty(PRECOMPILED_HEADER) {
DEFINES += USING_PCH
}Um den vorkompilierten Header auch für C-Dateien im MSVC-nmake-Ziel zu verwenden, fügen Sie „ precompile_header_c “ zur Variablen „CONFIG“ hinzu. Wenn der Header auch für C++ verwendet wird und C++-Schlüsselwörter oder -Includes enthält, setzen Sie diese in Anführungszeichen („ #ifdef __cplusplus “).
Hinweise zu möglichen Problemen
Auf einigen Plattformen entspricht die Dateiendung für vorkompilierte Header-Dateien derjenigen für andere Objektdateien. Beispielsweise können die folgenden Deklarationen dazu führen, dass zwei verschiedene Objektdateien mit demselben Namen erzeugt werden:
PRECOMPILED_HEADER = window.h
SOURCES = window.cppUm solche potenziellen Konflikte zu vermeiden, sollten Sie den Header-Dateien, die vorkompiliert werden sollen, eindeutige Namen geben.
Beispielprojekt
Den folgenden Quellcode finden Sie im Verzeichnis „ examples/qmake/precompile “ der Qt-Distribution:
mydialog.ui
Die folgende Abbildung zeigt die Datei „mydialog.ui“ im Design-Modus von „ Qt Creator “. Im Bearbeitungsmodus können Sie den Code einsehen.

stable.h
/* Add C includes here */
#if defined __cplusplus
/* Add C++ includes here */
# include <iostream>
# include <QApplication>
# include <QPushButton>
# include <QLabel>
#endifmyobject.h
#include <QObject>
class MyObject : public QObject
{
public:
MyObject();
~MyObject();
};myobject.cpp
#include <iostream>
#include <QDebug>
#include <QObject>
#include "myobject.h"
MyObject::MyObject()
: QObject()
{
std::cout << "MyObject::MyObject()\n";
}util.cpp
void util_function_does_nothing()
{
// Nothing here...
int x = 0;
++x;
}main.cpp
#include <QApplication>
#include <QPushButton>
#include <QLabel>
#include "myobject.h"
#include "mydialog.h"
int main(int argc, char **argv)
{
QApplication app(argc, argv);
MyObject obj;
MyDialog dialog;
dialog.connect(dialog.aButton, SIGNAL(clicked()), SLOT(close()));
dialog.show();
return app.exec();
}precompile.pro
TEMPLATE = app
LANGUAGE = C++
CONFIG += cmdline precompile_header
# Use Precompiled headers (PCH)
PRECOMPILED_HEADER = stable.h
HEADERS = stable.h \
mydialog.h \
myobject.h
SOURCES = main.cpp \
mydialog.cpp \
myobject.cpp \
util.cpp
FORMS = mydialog.ui© 2026 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.