Änderungen am Build-System in Qt 6

Ein Großteil der Arbeit, die in Qt 6 eingeflossen ist, bezog sich darauf, wie Qt und seine Module gebaut werden. Das Ziel war es, Qt zukunftssicher zu machen, indem man auf ein weit verbreitetes und beliebtes Build-Tool umstieg: CMake.

Qt aus den Quellen bauen

Das Qt 5 Build-System wurde auf qmake aufgebaut. In Qt 6 haben wir das Build-System auf CMake portiert.

Hinweis: Dies betrifft nur Benutzer, die Qt aus den Quellen bauen wollen. Sie können qmake weiterhin als Build-Tool für Ihre Applikationen verwenden.

Es ist möglich, Qt direkt von der Kommandozeile aus zu konfigurieren, indem man cmake aufruft. Wir empfehlen jedoch weiterhin das configure-Kommandozeilen-Tool, das eine deutlich schönere Oberfläche und zusätzliche Fehlerprüfungen bietet.

Siehe auch Qt Configure Options für einen Überblick über die neue configure API.

CMake, Ninja als externe Abhängigkeiten

Sie benötigen eine aktuelle Version von CMake, um Qt zu konfigurieren und zu bauen. Für Qt 6.0 benötigen wir CMake 3.16. Ab Qt 6.2 benötigen wir CMake 3.21, wenn wir Qt als statische Bibliotheken bauen. Ab Qt 6.6 benötigen wir CMake 3.21.1, um Qt für Apple-Plattformen zu erstellen. Sie müssen auch eine aktuelle Version des Ninja-Tools installiert haben.

Sowohl CMake als auch Ninja sind Open-Source-Tools, die auf verschiedenen Wegen installiert werden können. Sie sind auch unter Qt Online Installer verfügbar.

Einen detaillierteren Überblick über die Build-Anforderungen auf verschiedenen Plattformen finden Sie unter Erstellen von Qt-Quellen.

Auswählen einer Qt-Lizenz

In Qt 5 mussten Sie bei configure auswählen, ob Sie Qt unter einer kommerziellen oder einer Open-Source-Lizenz verwenden möchten. Wenn Sie mehrere kommerzielle Lizenzen hatten, mussten Sie auch die Lizenz auswählen, die Sie verwenden wollten.

Wir haben beide Auswahlmöglichkeiten in Qt 6 entfernt. Die Auswahl der Lizenzen, die Ihnen zur Verfügung stehen, hängt von den rechtlichen Verträgen ab, die Sie mit The Qt Company haben, nicht von den Artefakten.

Die configure-Optionen -opensource, -commercial und -confirm-license werden in Qt 6 ignoriert und könnten in zukünftigen Versionen von Qt entfernt werden.

Wiederholung von configure

Manchmal möchte man configure erneut ausführen, um verschiedene configure-Optionen zu testen. In Qt 5 hat configure verschiedene Informationen aus der Umgebung zwischen den Läufen zwischengespeichert, aber ansonsten von einem sauberen Zustand aus gestartet: Man musste -redo oder das Shell-Skript config.status verwenden, um Argumente aus einem vorherigen Lauf wiederzuverwenden. Sie konnten auch die Optionen -recheck, -recheck-all verwenden, um eine erneute Auswertung der zwischengespeicherten Tests zu erzwingen.

CMake und damit auch configure in Qt 6 zwischenspeichert die Ergebnisse noch aggressiver. Erkannte Umgebungseinstellungen, aber auch Selektionen durch andere Kommandozeilenargumente, werden in einer Datei namens CMakeCache.txt gespeichert. Wenn Sie configure mit neuen Optionen ausführen, werden die neuen Optionen in dieser Datei zusammengeführt. Löschen Sie die Datei, um von vorne zu beginnen. Die obigen configure-Optionen werden nicht mehr unterstützt.

Nur Teile von Qt bauen

Das Build-System von Qt 5 erlaubte es Ihnen, das Build-Tool (z.B. make) in einem Unterverzeichnis auszuführen, um einen teilweisen Re-Build durchzuführen.

CMake folgt einem anderen Paradigma und verlangt, dass Sie Targets aus dem Top-Level-Verzeichnis bauen, wobei der gesamte Build berücksichtigt wird. Verwenden Sie ninja -t targets, um alle verfügbaren Targets des Builds zu sehen.

Auflösen von Bibliotheken von Drittanbietern

Eine der Aufgaben von configure ist es, die Verfügbarkeit von verschiedenen Drittanbieter-Paketen in der Umgebung zu erkennen. In Qt 5 benutzte configure optional pkg-config für diese Aufgabe, aber auch verschiedene Kompilierzeittests. Diese Prüfungen konnten von der Kommandozeile aus mit verschiedenen Zuweisungen wie ICU_PREFIX, ICU_LIBS, etc. optimiert werden.

In Qt 6 verlässt sich configure auf CMake, um Abhängigkeiten aufzulösen. Für die meisten Abhängigkeiten erfordert dies, dass die Drittanbieter-Bibliothek ein CMake-Paket im CMake-Suchpfad bereitstellt. Sie können die Variable CMAKE_PREFIX_PATH verwenden, um diesen Pfad mit eigenen Speicherorten zu erweitern.

Einige Abhängigkeiten wie OpenSSL werden auch durch eine Logik innerhalb von CMake erkannt: Wenn OpenSSL nicht erkannt wird, müssen Sie möglicherweise die CMake-Variable OPENSSL_ROOT_DIR so setzen, dass sie auf das Installationsverzeichnis zeigt.

Auswählen der Toolchain

In Qt 5 verwendete configure sogenannte mkspecs, um sowohl die Build- als auch die Zielplattform zu spezifizieren(Optionen-platform, -xplatform und -device ). CMake verwendet diese nicht, sondern verlässt sich stattdessen auf Umgebungsprüfungen und Toolchain-Dateien (siehe auch die CMake-toolchains-Dokumentation). Die Optionen -platform und -xplatform sind weiterhin verfügbar, werden aber nur verwendet, um die Standardeinstellungen für das generierte qmake-Tool zu setzen.

Qt quer kompilieren

Cross-Kompilierung ist die Kompilierung von Code für ein Computersystem (das Ziel) auf einem anderen System (dem Host). Eine Build-Umgebung für die Cross-Kompilierung von Qt-Applikationen erfordert, dass Qt-Werkzeuge auf dem Host verfügbar sind (man denke an moc, rcc) und Qt-Bibliotheken für das Target gebaut werden.

In Qt 5 konnte man mit configure sowohl die Host-Tools als auch die Target-Tools und -Bibliotheken in einem Schritt erstellen. In Qt 6 wird dies nicht mehr unterstützt. Stattdessen muss Qt auf dem Host installiert sein und laufen, bevor man Qt für das Target crosskompilieren kann. Das installierte Qt muss außerdem dieselbe Version haben wie die, die crosskompiliert werden soll.

Weitere Details zur Cross-Kompilierung finden Sie unter Konfigurieren eines Embedded-Linux-Geräts, Qt für Android - Erstellen vom Quellcode und Qt für iOS - Erstellen vom Quellcode.

Portierung von Qt Plugins und zusätzlichen Bibliotheken

Während qmake weiterhin für die Erstellung von Qt-Applikationen unterstützt wird, kann es nicht mehr zum Kompilieren von benutzerdefinierten Qt-Plugins oder Bibliotheken verwendet werden, die auf Interna des Qt 5-Build-Systems basieren. Solche Bibliotheken oder Plugins müssen für die Verwendung mit Qt 6 auf CMake portiert werden.

Zum Zeitpunkt der Veröffentlichung von Qt 6.0 befindet sich die API zur Erstellung von benutzerdefinierten Qt-Plugins oder -Bibliotheken noch in der Tech-Preview, was bedeutet, dass sie sich in zukünftigen Versionen noch ändern kann. Eine öffentliche stabile API wird in einer späteren Qt 6-Version zur Verfügung gestellt.

© 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.