qt_generate_deploy_qml_app_script
Erstellen Sie ein Bereitstellungsskript für eine QML-Anwendung.
Der Befehl ist in der Komponente „ Qml “ des Pakets „ Qt6 “ definiert, die wie folgt geladen werden kann:
find_package(Qt6 REQUIRED COMPONENTS Qml)Dieser Befehl wurde in Qt 6.3 eingeführt.
Warnung: Wenn Sie eine CMake-Version unter 3.19 verwenden, stellen Sie sicher, dass Sie die Option „ MANUAL_FINALIZATION “ an `qt_add_executable()` übergeben und anschließend `qt_finalize_target()` aufrufen, bevor Sie diese Funktion aufrufen.
Übersicht
qt_generate_deploy_qml_app_script(
TARGET <target>
OUTPUT_SCRIPT <var>
[NO_UNSUPPORTED_PLATFORM_ERROR]
[NO_TRANSLATIONS]
[NO_COMPILER_RUNTIME]
[NO_PLUGINS] # since Qt 6.10
[EXCLUDE_PLUGIN_TYPES type_or_target...] # since Qt 6.10
[INCLUDE_PLUGIN_TYPES type_or_target...] # since Qt 6.10
[EXCLUDE_PLUGINS name...] # since Qt 6.10
[INCLUDE_PLUGINS name...] # since Qt 6.10
[DEPLOY_TOOL_OPTIONS ...]
[DEPLOY_USER_QML_MODULES_ON_UNSUPPORTED_PLATFORM]
[PRE_INCLUDE_REGEXES regexes...]
[PRE_EXCLUDE_REGEXES regexes...]
[POST_INCLUDE_REGEXES regexes...]
[POST_EXCLUDE_REGEXES regexes...]
[POST_INCLUDE_FILES files...]
[POST_EXCLUDE_FILES files...]
)Wenn versionslose Befehle deaktiviert sind, verwenden Sie stattdessen ` qt6_generate_deploy_qml_app_script() `. Dieser Befehl unterstützt dieselben Argumente wie der vorliegende Befehl.
Beschreibung
Die Installation eines ausführbaren Ziels, das gleichzeitig ein QML-Modul ist, erfordert neben dem Ziel selbst die Bereitstellung einer Reihe weiterer Komponenten. Möglicherweise müssen auch Qt-Bibliotheken und andere Bibliotheken aus dem Projekt, Qt-Plugins sowie die Laufzeitkomponenten aller von der Anwendung verwendeten QML-Module installiert werden. Die Installationsstruktur unterscheidet sich bei macOS-App-Bundles zudem von der auf anderen Plattformen. Der Befehl ` qt_generate_deploy_qml_app_script() ` ist ein Hilfsbefehl, der diesen Vorgang vereinfachen soll, ähnlich wie es `qt_generate_deploy_app_script()` für Nicht-QML-Anwendungen tut.
Der Befehl setzt voraus, dass die Anwendung der von Qt empfohlenen Installationsverzeichnisstruktur weitgehend folgt. Diese Struktur basiert auf dem Standard-Installationslayout von CMake, wie es durch GNUInstallDirs festgelegt ist (mit Ausnahme von macOS-App-Bundles, die stattdessen den Anforderungen von Apple folgen). QML-Module werden an dem für die jeweilige Plattform geeigneten Speicherort installiert. Bei macOS-Bundles wird die Datei „ qmldir “ jedes QML-Moduls im entsprechenden Unterverzeichnis unter „ Resources/qml “ installiert, und das Plugin des Moduls (falls vorhanden) wird unter „ PlugIns “ installiert. Es wird davon ausgegangen, dass das App-Bundle direkt im Basisinstallationsverzeichnis installiert wird (siehe das weiter unten stehende Beispiel ). Auf allen anderen Plattformen werden sowohl die Datei „ qmldir “ als auch das Plugin des Moduls im entsprechenden Unterverzeichnis unter „ qml “ installiert, wobei sich dieser Pfad relativ zum Basisinstallationsverzeichnis bezieht.
qt_generate_deploy_qml_app_script() erzeugt ein Skript, dessen Name in der durch die Option „ OUTPUT_SCRIPT “ benannten Variablen gespeichert wird. Dieses Skript wird nur zum Zeitpunkt der CMake-Generierung geschrieben. Es ist für die Verwendung mit dem Befehl `install(SCRIPT)` vorgesehen, der erst ausgeführt werden sollte, nachdem das Ziel der Anwendung mit `install(TARGETS)` installiert wurde.
Das Bereitstellungsskript ruft ` qt_deploy_qml_imports() ` mit einem geeigneten Optionssatz für das Standard-Installationslayout auf. Bei macOS-App-Bundles und Windows-Zielen ruft es anschließend auch `qt_deploy_runtime_dependencies()` auf, ebenfalls mit geeigneten Optionen für das Standard-Installationslayout.
Der Aufruf von ` qt_generate_deploy_qml_app_script() ` für eine Plattform, die von ` qt_deploy_runtime_dependencies ` nicht unterstützt wird, führt zu einem schwerwiegenden Fehler, es sei denn, die Option ` NO_UNSUPPORTED_PLATFORM_ERROR ` wird angegeben. Wenn diese Option angegeben wird und das Projekt für eine nicht unterstützte Plattform erstellt wird, werden weder QML-Module noch reguläre Laufzeitabhängigkeiten installiert. Um sicherzustellen, dass die QML-Module dennoch installiert werden, geben Sie sowohl die Option ` NO_UNSUPPORTED_PLATFORM_ERROR ` als auch die Option ` DEPLOY_USER_QML_MODULES_ON_UNSUPPORTED_PLATFORM ` an. Die letztgenannte Option stellt sicher, dass die als Teil des Projekts erstellten QML-Module weiterhin installiert werden.
Auf anderen Plattformen als macOS werden Qt-Übersetzungen automatisch bereitgestellt. Um dieses Verhalten zu unterbinden, geben Sie „ NO_TRANSLATIONS “ an. Verwenden Sie `qt_deploy_translations()`, um Übersetzungen auf individuelle Weise bereitzustellen.
Bei Windows-Desktop-Anwendungen werden standardmäßig auch die für den Compiler erforderlichen Laufzeitdateien installiert. Um dies zu verhindern, geben Sie „ NO_COMPILER_RUNTIME “ an.
Seit Qt 6.7 können Sie mit ` DEPLOY_TOOL_OPTIONS ` zusätzliche Optionen an das zugrunde liegende Bereitstellungstool übergeben. Dies wirkt sich nur aus, wenn das zugrunde liegende Bereitstellungstool entweder `macdeployqt` oder `windeployqt` ist.
Hinweis: Ein Wert, der Leerzeichen enthält – wie beispielsweise eine Code-Signatur-Identität – gelangt nur dann unverändert zum Bereitstellungs-Tool, wenn QTP0007 auf „ NEW “ gesetzt ist. Bei der Einstellung „ OLD “ wird ein solcher Wert ohne Anführungszeichen in das generierte Skript geschrieben und an Leerzeichen aufgeteilt; Projekte haben dies bisher durch Hinzufügen einer weiteren Ebene von Anführungszeichen umgangen. Entfernen Sie diese zusätzliche Anführungszeichenumschließung, wenn Sie die Richtlinie auf „ NEW “ setzen.
Hinweis: Die versionloseEinstellung „ qt_generate_deploy_qml_app_script() “ leitet ihre Argumente je nach Wert von QTP0008 entweder über eine Funktion oder ein Makro weiter. Bei der Einstellung „ OLD “ wird ein Wert, der einen Backslash oder eine „ ${var} “-Referenz enthält, zum Zeitpunkt der Makroauswertung ausgewertet, sodass ein regulärer Ausdruck wie „ foo\\.dylib “ eine Ebene der Escape-Zeichen verliert. Dies betrifft „ DEPLOY_TOOL_OPTIONS “ sowie die Argumente für reguläre Ausdrücke und Dateilisten. Durch den direkten Aufruf von „ qt6_generate_deploy_qml_app_script() “ lässt sich dieses Problem vermeiden.
Die Optionen PRE_INCLUDE_REGEXES, PRE_EXCLUDE_REGEXES, POST_INCLUDE_REGEXES, POST_EXCLUDE_REGEXES, POST_INCLUDE_FILES und POST_EXCLUDE_FILES können angegeben werden, um die Bereitstellung von Laufzeitabhängigkeiten zu steuern. Diese Optionen gelten nicht für alle Plattformen und werden unverändert an qt_deploy_runtime_dependencies() weitergeleitet.
Die Optionen „ EXCLUDE_PLUGINS “, „ EXCLUDE_PLUGIN_TYPES “, „ INCLUDE_PLUGINS “ und „ INCLUDE_PLUGIN_TYPES “ dienen zur Auswahl von Qt-Plugins. Die Dokumentation dazu finden Sie unter „qt_deploy_runtime_dependencies() “.
Mit der Option „ NO_PLUGINS “ können Sie die Plugin-Bereitstellung vollständig deaktivieren.
Verwenden Sie für die Bereitstellung einer Nicht-QML-Anwendung stattdessen qt_generate_deploy_app_script(). Es ist ein Fehler, sowohl qt_generate_deploy_qml_app_script() als auch qt_generate_deploy_app_script() für dasselbe Ziel aufzurufen.
Beispiel
Das folgende Beispiel zeigt, wie eine „ Qt Quick “-App bereitgestellt wird.
cmake_minimum_required(VERSION 3.16...3.22)
project(MyThings)
find_package(Qt6 6.3 REQUIRED COMPONENTS Core Qml)
qt_standard_project_setup()
qt_add_executable(MyApp main.cpp)
qt_add_qml_module(MyApp
URI Application
VERSION 1.0
QML_FILES main.qml MyThing.qml
)
install(TARGETS MyApp
BUNDLE DESTINATION .
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
)
qt_generate_deploy_qml_app_script(
TARGET MyApp
OUTPUT_SCRIPT deploy_script
NO_UNSUPPORTED_PLATFORM_ERROR
DEPLOY_USER_QML_MODULES_ON_UNSUPPORTED_PLATFORM
)
install(SCRIPT ${deploy_script})Das folgende Beispiel zeigt, wie zusätzliche Optionen an das zugrunde liegende Bereitstellungswerkzeug übergeben werden.
# Pass the values on to the deploy tool unchanged, see \l {QTP0007}.
qt_policy(SET QTP0007 NEW)
set(deploy_tool_options_arg "")
if(APPLE)
set(deploy_tool_options_arg
--hardened-runtime
"-codesign=Developer ID Application: Joe Developer (1234567890)"
)
elseif(WIN32)
set(deploy_tool_options_arg --no-compiler-runtime)
endif()
qt_generate_deploy_qml_app_script(
...
DEPLOY_TOOL_OPTIONS ${deploy_tool_options_arg}
)
install(SCRIPT ${deploy_script})Siehe auch `qt_standard_project_setup()`, `qt_generate_deploy_app_script()`, QTP0007 und QTP0008.
© 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.