Erstellen einer optimierten Qt-Version
Auf dieser Seite wird beschrieben, wie Sie eine kleinere und auf Ihre spezifischen Anforderungen zugeschnittene Version von Qt konfigurieren und erstellen können.
Schritt 1: Quellen beschaffen, Voraussetzungen installieren und Umgebung einrichten
Informationen zum Herunterladen der Quellcodes, zur Installation der Abhängigkeiten und zur Einrichtung der Umgebung finden Sie in den plattformspezifischen Anleitungen:
- Qt für Windows – Kompilieren aus dem Quellcode
- Qt für macOS – Kompilieren aus dem Quellcode
- Qt für Linux – Kompilieren aus dem Quellcode
- Ein Embedded-Linux-Gerät konfigurieren
- Qt für Android – Kompilieren aus dem Quellcode
- Qt für iOS – Kompilieren aus dem Quellcode
Schritt 2: Kompilieren der Qt-Bibliotheken und -Tools
Befolgen Sie die plattformspezifischen Anweisungen und verwenden Sie die folgenden Qt-Konfigurationsoptionen, um einen für Ihre Anforderungen optimierten Build zu erstellen.
Die folgende Tabelle beschreibt detaillierter die Konfigurationsoptionen, mit denen sich die Größe des Builds reduzieren lässt.
| Qt-Konfigurationsoption | Beschreibung |
|---|---|
| -static | Erzeugt Archivdateien für die statische Verknüpfung. Eine statische Binärdatei ist mit allen erforderlichen Bibliotheken und Abhängigkeiten verknüpft, die in die ausführbare Datei selbst eingebettet sind. Das bedeutet, dass das Programm beim Ausführen seine eigene interne Kopie der benötigten Bibliotheken verwendet, anstatt auf externe Bibliotheken zurückzugreifen. Dadurch kann der Linker unnötige Teile des Binärcodes entfernen. Dies ist die optimale Lösung für die Bereitstellung einzelner ausführbarer Dateien. |
| -ltcg | Link-Time-Optimierung (LTO) ist eine leistungsstarke Technik, die die Leistung erheblich verbessern und die Größe Ihrer ausführbaren Datei reduzieren kann, indem der Binärcode in der Verknüpfungsphase analysiert und optimiert wird. |
| -reduce-exports | Reduziert die Anzahl der exportierten Symbole. |
| -gc-binaries | Entfernt unnötige Teile aus der Binärdatei. Jede Funktion oder jedes Datenelement wird in einen eigenen Abschnitt verschoben, und die Garbage Collection des Linkers für ungenutzte Abschnitte wird aktiviert. |
| -submodules qtbase,qtdeclarative,qtqmlscriptcompiler,qtsvg | Zu kompilierende Submodule. Beschränken Sie die Abhängigkeiten auf unnötige Funktionen. |
| -skip qtlanguageserver,qtquicktimeline | Entfernen Sie automatisch eingebundene Submodule aus der Kompilierung. Beschränken Sie die Abhängigkeiten auf nicht benötigte Funktionen. |
| -disable-deprecated-up-to <Version> | Veraltete Implementierung entfernen. Setzt den Wert „ QT_DISABLE_DEPRECATED_UP_TO “ auf <version>. „ QT_DISABLE_DEPRECATED_UP_TO “ wird verwendet, um veraltete Methoden sowohl aus der API als auch aus der ABI zu entfernen. <version> ist ein Hexadezimalwert. Verwenden Sie beispielsweise 0x070000, um den gesamten Code zu entfernen, der in Qt 7.0.0 oder früheren Versionen veraltet ist. Standardmäßig ist <version> unter Windows auf 0x040000 und unter anderen Betriebssystemen auf 0x050000 gesetzt. |
Darüber hinaus können Sie Funktionen einzeln entfernen, wie unter „Funktionen ein- oder ausschließen“ beschrieben. Dies kann zu Einschränkungen bei den verfügbaren Komponenten und Funktionen führen. Nicht alle Kombinationen werden getestet. Qt Testet bestimmte minimale Kombinationen von Konfigurationsoptionen im Continuous-Integration-System (CI); dabei wird eine stark minimierte Embedded-Linux-Konfiguration sowie etwas weniger minimierte Konfigurationen für andere Plattformen getestet. Diese Konfigurationen dienen der Ausführung von Qt Quick-Anwendungen.
Der Qt-Befehl „configure“ unterstützt außerdem den Befehlszeilenparameter „ -- “ (doppelte Bindestriche), der es dem Benutzer ermöglicht, zusätzliche CMake-Argumente wie beispielsweise „-DCMAKE_CXX_FLAGS="-march=native"“ einzufügen. Bei der Cross-Kompilierung können diese Parameter über -DCMAKE_TOOLCHAIN_FILE=Pfad/zur/Toolchain.cmake hinzugefügt werden, wie unter „Beispiel für eine Toolchain-Datei“ beschrieben. Die folgende Tabelle listet einige Optionen auf, deren Verwendung Sie mit GCC in Betracht ziehen können:
| Compiler-Option | Beschreibung |
|---|---|
| -march <arch> | Zielarchitektur. Verwenden Sie „native“, wenn die Anwendung auf derselben Architektur ausgeführt wird, auf der sie kompiliert wurde. |
| -mtune <tune> | Weist den Compiler an, Code zu generieren, der die Eigenschaften der angegebenen Prozessorarchitektur nutzt, wie z. B. deren Befehlssatz, die Anzahl der Register und die Cache-Hierarchie. |
| -fno-asynchronous-unwind-tables | Reduziert die Größe der Binärdatei. Beachten Sie, dass die Deaktivierung asynchroner Unwind-Tabellen Auswirkungen auf die Leistung, Kompatibilität und Wartbarkeit Ihres Codes haben kann. Es wird generell empfohlen, diese Option nur bei Bedarf und nach sorgfältiger Abwägung der möglichen Auswirkungen zu verwenden. |
| -fno-unwind-tables | Verringert die Größe der Binärdatei. Beachten Sie, dass das Deaktivieren von Unwind-Tabellen Auswirkungen auf die Leistung, Kompatibilität und Wartbarkeit Ihres Codes haben kann. Es wird generell empfohlen, diese Option nur bei Bedarf zu verwenden, nachdem Sie die möglichen Auswirkungen sorgfältig abgewogen haben. Es ist anzumerken, dass „ |
| -fomit-frame-pointer | Reduziert die Binärdateigröße. Wenn diese Option aktiviert ist, speichert der Compiler nicht für jeden Funktionsaufruf einen Frame-Zeiger auf dem Stack. Stattdessen verwendet er den Stack-Zeiger als Frame-Zeiger, was Speicherplatz sparen und die Leistung verbessern kann. Es ist anzumerken, dass einige Compiler, wie beispielsweise GCC und Clang, „ -fomit-frame-pointer “ standardmäßig aktivieren, wenn für bestimmte Architekturen wie ARM und PowerPC oder in bestimmten Optimierungsmodi kompiliert wird. |
| -fno-exceptions | Reduziert die Größe der Binärdatei. Wenn diese Option aktiviert ist, generiert der Compiler keinen Code für Try-Catch-Blöcke, und alle Versuche, Ausnahmen auszulösen oder abzufangen, führen zu Laufzeitfehlern. Qt selbst funktioniert ohne Ausnahmen, aber einige Abhängigkeiten erfordern möglicherweise Ausnahmen. |
| -no-pie | Reduziert die Größe der Binärdatei. Generell sollte „ -fno-pie “ mit Vorsicht und nur bei Bedarf verwendet werden, da dies Auswirkungen auf die Kompatibilität und Leistung Ihres kompilierten Codes haben kann. Eine positionsunabhängige ausführbare Datei erhöht zudem die Sicherheit. Weitere Informationen zu positionsunabhängigem Code finden Sie unter „Address Space Layout Randomization“ in Wikipedia. |
Die folgende Tabelle listet Linker-Optionen auf:
| Linker-Option | Beschreibung |
|---|---|
| -no-pie | Reduziert die Größe der Binärdatei. Im Allgemeinen sollte „ -fno-pie “ mit Vorsicht und nur bei Bedarf verwendet werden, da dies Auswirkungen auf die Kompatibilität und Leistung Ihres kompilierten Codes haben kann. Eine positionsunabhängige ausführbare Datei bietet zudem zusätzliche Sicherheit. Weitere Informationen zu positionsunabhängigem Code finden Sie unter „Address Space Layout Randomization“ in Wikipedia. |
Schritt 3: Erstellen Ihrer Anwendung
Nachdem Qt installiert ist, können Sie damit beginnen, Anwendungen zu erstellen.
Optimieren Sie die QML-Codegenerierung mit CMake-Projektbefehlen. Weitere Informationen zur QML-Codegenerierung finden Sie unter „qt_add_qml_module “ sowie in den „Best Practices für QML“ und „ Qt Quick “.
Der Befehl im folgenden CMake-Codeausschnitt verringert die Größe der Binärdatei:
set_target_properties(
ExampleApp
PROPERTIES
QT_QMLCACHEGEN_ARGUMENTS "--only-bytecode"
)Wenn Sie Ihre Anwendung über eine IDE erstellen möchten, müssen Sie die Qt-Version dort explizit registrieren:
- Informationen zu „ Qt Creator “ finden Sie unter Qt Creator: Qt-Versionen hinzufügen.
- Für „ Qt Extension for Visual Studio Code “ siehe Qt Extension for Visual Studio Code: Qt-Installationen registrieren.
Wenn Sie Ihre Anwendung über die Befehlszeile erstellen, befolgen Sie die plattformspezifische Anleitung.
© 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.