Vorkompilierte Header verwenden
Vorkompilierte Header (PCH) sind ein Leistungsmerkmal, das von einigen Compilern unterstützt wird, um einen stabilen Codekörper zu kompilieren und den kompilierten Zustand des Codes in einer Binärdatei zu speichern. 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 neu kompiliert werden muss.
qmake unterstützt die Verwendung von vorkompilierten Headern auf einigen Plattformen und 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 vorkompilierter Header zu Ihrem Projekt
Der vorkompilierte Header muss Code enthalten, der in Ihrem 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" ... #endif
Hinweis: Eine vorkompilierte Header-Datei muss C-Includes von C++-Includes trennen, da die vorkompilierte Header-Datei für C-Dateien möglicherweise keinen C++-Code enthält.
Projekt-Optionen
Damit Ihr Projekt vorkompilierte Header verwendet, müssen Sie nur die Variable PRECOMPILED_HEADER in Ihrer Projektdatei definieren:
PRECOMPILED_HEADER = stable.h
qmake kümmert sich um 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 tut, wenn die Konfiguration vorkompilierte Header unterstützt.
Die MSVC- und g++-Spezifikationen für Windows aktivieren standardmäßig precompile_header
.
Mit dieser Option können Sie bedingte Blöcke in Ihrer Projektdatei auslösen, um Einstellungen hinzuzufügen, wenn Sie vorkompilierte Header verwenden. Zum Beispiel:
precompile_header:!isEmpty(PRECOMPILED_HEADER) { DEFINES += USING_PCH }
Um den vorkompilierten Header auch für C-Dateien auf MSVC nmake target zu verwenden, fügen Sie precompile_header_c
zur CONFIG-Variable hinzu. Wenn der Header auch für C++ verwendet werden soll und C++-Schlüsselwörter/Includes enthält, schließen Sie diese mit #ifdef __cplusplus
ein.)
Hinweise zu möglichen Problemen
Auf einigen Plattformen ist das Suffix des Dateinamens für vorkompilierte Header-Dateien dasselbe wie das für andere Objektdateien. Zum Beispiel können die folgenden Deklarationen dazu führen, dass zwei verschiedene Objektdateien mit demselben Namen erzeugt werden:
PRECOMPILED_HEADER = window.h SOURCES = window.cpp
Um potenzielle Konflikte wie diese zu vermeiden, geben Sie den Header-Dateien, die vorkompiliert werden sollen, eindeutige Namen.
Beispielprojekt
Sie finden den folgenden Quellcode im Verzeichnis examples/qmake/precompile
in der Qt-Distribution:
mydialog.ui
Das folgende Bild zeigt die Datei mydialog.ui im Qt Creator Designmodus. Sie können den Code im Editiermodus betrachten.
stable.h
/* Add C includes here */ #if defined __cplusplus /* Add C++ includes here */ # include <iostream> # include <QApplication> # include <QPushButton> # include <QLabel> #endif
myobject.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
© 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.