Seit Version 5.14.0 ist Qt roambar , d.h. Sie können Ihre Qt-Installation in ein anderes Verzeichnis verschieben, ohne die Funktionalität zu beeinträchtigen oder Plugins zu laden.
Was bedeutet das für mich?
Kommen wir zur Rolle des Qt Build Masters in einem Windows-Projekt. Sie sind derjenige, der alle Argumenteinstellungen auswendig kennt. Sie wissen, an welcher Optimierungsschraube Sie drehen und welche unnötigen Funktionen Sie ausschalten müssen.
Ihr Build von Qt ist perfekt auf das Projekt zugeschnitten, und Sie stellen eine ZIP-Datei mit der Qt-Installation zur Verfügung.
configure -prefix C:/Qt/5.12.6 ...more options... jom jom install zip -r X:\shared_stuff\qt-5.12.6.zip C:\Qt\5.12.6
Dann extrahieren Ihre Teamkollegen das Archiv an denselben Ort und alles funktioniert hervorragend.
Jetzt muss Joe Developer aus irgendeinem Grund die Qt-Installation in ein anderes Laufwerk/Verzeichnis entpacken.
Qt funktioniert in diesem anderen Verzeichnis nicht. QMake wird nicht richtig funktionieren. Plugins können nicht geladen werden. Qt-Assets nicht gefunden.
Warum ist alles kaputt?
In der Vergangenheit hat die Qt-Konfiguration das Installationsverzeichnis in die ausführbare Datei qmake und die Qt5Core-Bibliothek eingebettet. Die Logik in QLibraryInfo versucht, Plugins, Assets und mkspecs unter einem fest codierten Präfix zu finden, das Sie immer mit dem Argument -prefix zur Konfiguration übergeben haben.
Funktioniert das Verschieben des Installationsverzeichnisses in Qt 5.14?
Oh ja! Beginnend mit Qt 5.14.0 kann das Installationspräfix automatisch durch den Speicherort der Qt5Core-Bibliothek oder der ausführbaren Datei selbst bestimmt werden, ohne fest codierte Pfade zu verwenden.
Dieser Automatismus wird zum Zeitpunkt der Konfiguration von Qt über die
Move-Funktion
gesteuert.
Diese Funktion ist standardmäßig für nicht statische Builds von Qt aktiviert.
Wenn Sie eine verschiebbare statische Baugruppe benötigen, aktivieren Sie diese Funktion manuell:
onfigure -static -feature-relocatable ...
Der Vorbehalt bei verschiebbaren statischen Assemblys besteht darin, dass die internen Übersetzungen von Qt nicht automatisch gehandhabt werden.
Sie müssen die Qt-Übersetzungsdateien zusammen mit Ihrer Anwendung bereitstellen.
Dieser Unterschied zu einer nicht verschiebbaren Assembly ist der Grund, warum
relocation
für statische Assemblys standardmäßig deaktiviert ist.
Wenn es mir nicht gefällt, kann ich diese Funktion deaktivieren?
Natürlich kannst du.
configure -no-feature-relocatable ...
wird das alte Verhalten zurückgeben.
Beispielsweise benötigen Linux-Distributionen kein verschiebbares Qt und können diese Funktion deaktivieren.