Auf dieser Seite

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:

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-KonfigurationsoptionBeschreibung
-staticErzeugt 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.
-ltcgLink-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-exportsReduziert die Anzahl der exportierten Symbole.
-gc-binariesEntfernt 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,qtsvgZu kompilierende Submodule. Beschränken Sie die Abhängigkeiten auf unnötige Funktionen.
-skip qtlanguageserver,qtquicktimelineEntfernen 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-OptionBeschreibung
-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-tablesReduziert 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-tablesVerringert 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 „ -fno-unwind-tables “ eine aggressivere Variante von „ -fno-asynchronous-unwind-tables “ ist, da es die Erstellung von Unwind-Tabellen vollständig deaktiviert, während letztere Option lediglich die asynchrone Generierung von Unwind-Tabellen deaktiviert.

-fomit-frame-pointerReduziert 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-exceptionsReduziert 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-pieReduziert 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-OptionBeschreibung
-no-pieReduziert 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:

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.