Optimiertes Qt bauen
Diese Seite beschreibt den Prozess des Konfigurierens und Erstellens einer kleineren und maßgeschneiderten Version von Qt, entsprechend Ihren spezifischen Bedürfnissen.
Schritt 1: Besorgen der Quellen, Installieren der Build-Anforderungen und Einrichten der Umgebung
Um die Quellen zu erhalten, Abhängigkeiten zu installieren und die Umgebung einzurichten, lesen Sie bitte die plattformspezifischen Anweisungen:
- Qt für Windows - Erstellung aus dem Quellcode
- Qt für macOS - Erstellung aus dem Quellcode
- Qt für Linux/X11 - Erstellung aus dem Quellcode
- Ein Embedded Linux Gerät konfigurieren
- Qt für Android - Erstellung aus dem Quellcode
- Qt für iOS - Erstellung aus dem Quellcode
Schritt 2: Erstellen der Qt-Bibliotheken und -Tools
Befolgen Sie Ihre plattformspezifischen Anweisungen und verwenden Sie die folgenden Qt-Konfigurationsoptionen, um einen für Ihre Bedürfnisse optimierten Build zu erstellen.
Die folgende Tabelle beschreibt detaillierter die Konfigurationsoptionen, die helfen, die Größe des Builds zu reduzieren.
Qt-Konfigurationsoption | Beschreibung |
---|---|
-static | Erzeugt Archivdateien für statisches Linken. Eine statische Binärdatei wird mit allen notwendigen Bibliotheken und Abhängigkeiten gelinkt, die in der ausführbaren Datei selbst eingebettet sind. Das bedeutet, dass das Programm, wenn Sie es ausführen, seine eigene interne Kopie der benötigten Bibliotheken verwendet, anstatt sich auf externe Bibliotheken zu verlassen. Dies ermöglicht es dem Linker, unnötige Teile des Binärcodes wegzulassen. Dies ist die optimalste Lösung für die Lieferung einzelner ausführbarer Dateien. |
-ltcg | Link Time Optimization (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 Linking-Phase analysiert und optimiert wird. |
-reduce-exports | Reduziert die Menge der exportierten Symbole. |
-gc-binaries | Entfernt unnötige Teile aus dem Binärcode. Platzieren Sie jede Funktion oder jedes Datenelement in einem eigenen Abschnitt und aktivieren Sie die Linker Garbage Collection von unbenutzten Abschnitten. |
-Untermodule qtbase,qtdeclarative,qtqmlscriptcompiler,qtsvg | Zu kompilierende Untermodule. Beschränke Abhängigkeiten auf unnötige Features. |
-skip qtlanguageserver,qtquicktimeline | Entfernt automatisch eingebundene Submodule von der Kompilierung. Beschränke Abhängigkeiten auf nicht benötigte Funktionen. |
-disable-deprecated-up-to <Version> | Entfernt veraltete Implementierungen. 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 Hex-Wert. Verwenden Sie zum Beispiel 0x070000, um allen Code zu entfernen, der in Qt 7.0.0 oder früheren Versionen veraltet ist. Standardmäßig ist <version> unter Windows und Nicht-Windows auf 0x040000 bzw. 0x050000 gesetzt. |
Darüber hinaus können Sie Features einzeln entfernen, wie in Einschließen oder Ausschließen von Features beschrieben. Dies kann zu Einschränkungen bei den verfügbaren Komponenten und Funktionalitäten führen. Nicht alle Kombinationen werden getestet. Qt testet eine bestimmte Kombination von Konfigurationsoptionen in der kontinuierlichen Integration (CI). Diese configure-Optionskombination ist in der Lage, einfache QML-Anwendungen auszuführen.
Der Qt configure-Befehl unterstützt auch den - - (Doppelstrich) Kommandozeilenparameter, der es dem Benutzer ermöglicht, zusätzliche CMake-Argumente wie -DCMAKE_CXX_FLAGS="-march=native" zu übergeben. Im Falle einer Cross-Kompilierung können diese Parameter über -DCMAKE_TOOLCHAIN_FILE=path/to/toolchain.cmake hinzugefügt werden, wie in Eine Beispiel-Toolchain-Datei beschrieben. In der folgenden Tabelle sind einige Optionen aufgeführt, die Sie mit GCC verwenden 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 erzeugen, der die Eigenschaften der angegebenen Prozessorarchitektur nutzt, z. B. den Befehlssatz, die Anzahl der Register und die Cache-Hierarchie. |
-fno-asynchronous-unwind-tables | Verringert die Binärgröße. Beachten Sie, dass die Deaktivierung asynchroner Abspultabellen Auswirkungen auf die Leistung, Kompatibilität und Wartbarkeit Ihres Codes haben kann. Es wird allgemein 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ärdateien. Denken Sie daran, dass die Deaktivierung von Abspultabellen Auswirkungen auf die Leistung, Kompatibilität und Wartbarkeit Ihres Codes haben kann. Es wird im Allgemeinen empfohlen, diese Option nur dann zu verwenden, wenn es notwendig ist, nachdem die möglichen Auswirkungen sorgfältig abgewogen wurden. Es ist erwähnenswert, dass |
-fomit-frame-pointer | Verringert die Binärgröß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 Speicher sparen und die Leistung verbessern kann. Es ist erwähnenswert, dass einige Compiler, wie GCC und Clang, -fomit-frame-pointer standardmäßig aktivieren, wenn sie für bestimmte Architekturen, wie ARM und PowerPC, oder in bestimmten Optimierungsmodi kompilieren. |
-fno-exceptions | Verringert 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 zu werfen oder abzufangen, führen zu Laufzeitfehlern. Qt selbst arbeitet ohne Ausnahmen, aber einige Abhängigkeiten können Ausnahmen erfordern. |
-no-pie | Verringert die Binärgröße. Im Allgemeinen sollte -fno-pie mit Vorsicht und nur wenn nötig verwendet werden, da es Auswirkungen auf die Kompatibilität und Leistung Ihres kompilierten Codes haben kann. Die positionsunabhängige Ausführbarkeit erhöht auch die Sicherheit. Weitere Informationen zu positionsunabhängigem Code finden Sie unter Address Space Layout Randomization in Wikipedia. |
In der folgenden Tabelle sind die Linker-Optionen aufgeführt:
Linker-Option | Beschreibung |
---|---|
-no-pie | Verringert die Binärgröße. Im Allgemeinen sollte -fno-pie mit Vorsicht und nur bei Bedarf verwendet werden, da es Auswirkungen auf die Kompatibilität und Leistung Ihres kompilierten Codes haben kann. Eine positionsunabhängige ausführbare Datei erhöht auch die Sicherheit. Weitere Informationen zu positionsunabhängigem Code finden Sie unter Adressraum-Layout-Randomisierung in Wikipedia. |
Schritt 3: Erstellen Ihrer Anwendung
Nachdem Qt installiert ist, können Sie mit der Erstellung von Anwendungen beginnen.
Optimieren Sie die QML-Codegenerierung mit CMake-Projektbefehlen. Weitere Informationen zur QML-Codegenerierung finden Sie unter qt_add_qml_module und Best Practices für QML und Qt Quick.
Der Befehl im folgenden CMake-Codefragment verringert die Größe der Binärdatei:
set_target_properties( ExampleApp PROPERTIES QT_QMLCACHEGEN_ARGUMENTS "--only-bytecode" )
Wenn Sie planen, Ihre Anwendung von einer IDE aus zu bauen, müssen Sie die Qt-Version dort explizit registrieren. Für Qt Creator, siehe Qt Creator: Hinzufügen von Qt-Versionen.
Wenn Sie Ihre Anwendung über die Kommandozeile erstellen, folgen Sie der plattformspezifischen Anleitung.
© 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.