Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Loading...
Searching...
No Matches
qt_generate_deploy_qml_app_script.qdoc
Go to the documentation of this file.
1// Copyright (C) 2021 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
3
4/*!
5\page qt-generate-deploy-qml-app-script.html
6\ingroup cmake-commands-qtqml
7
8\title qt_generate_deploy_qml_app_script
9\keyword qt_generate_deploy_qml_app_script()
10
11\summary {Generate a deployment script for a QML application.}
12
13\include cmake-find-package-qml.qdocinc
14
15\cmakecommandsince 6.3
16
17\include cmake-qml-qt-finalize-target-warning.qdocinc warning
18
19\section1 Synopsis
20
21\badcode
22qt_generate_deploy_qml_app_script(
23 TARGET <target>
24 OUTPUT_SCRIPT <var>
25 [NO_UNSUPPORTED_PLATFORM_ERROR]
26 [NO_TRANSLATIONS]
27 [NO_COMPILER_RUNTIME]
28 [NO_PLUGINS] # since Qt 6.10
29 [EXCLUDE_PLUGIN_TYPES type_or_target...] # since Qt 6.10
30 [INCLUDE_PLUGIN_TYPES type_or_target...] # since Qt 6.10
31 [EXCLUDE_PLUGINS name...] # since Qt 6.10
32 [INCLUDE_PLUGINS name...] # since Qt 6.10
33 [DEPLOY_TOOL_OPTIONS ...]
34 [DEPLOY_USER_QML_MODULES_ON_UNSUPPORTED_PLATFORM]
35 [PRE_INCLUDE_REGEXES regexes...]
36 [PRE_EXCLUDE_REGEXES regexes...]
37 [POST_INCLUDE_REGEXES regexes...]
38 [POST_EXCLUDE_REGEXES regexes...]
39 [POST_INCLUDE_FILES files...]
40 [POST_EXCLUDE_FILES files...]
41)
42\endcode
43
44\versionlessCMakeCommandsNote qt6_generate_deploy_qml_app_script()
45
46\section1 Description
47
48Installing an executable target that is also a QML module requires deploying
49a number of things in addition to the target itself. Qt libraries and other
50libraries from the project, Qt plugins, and the runtime parts of all QML modules
51the application uses may all need to be installed too. The installed layout
52is also going to be different for macOS app bundles compared to other platforms.
53The \c{qt_generate_deploy_qml_app_script()} is a convenience command intended
54to simplify that process, similar to what
55\l qt_generate_deploy_app_script() does for
56non-QML applications.
57
58The command expects the application to follow Qt's recommended install
59directory structure fairly closely. That structure is based on CMake's default
60install layout, as determined by \l{GNUInstallDirs} (except for macOS app
61bundles, which follow Apple's requirements instead). QML modules are installed
62to the appropriate location for the platform. For macOS bundles, each QML
63module's \c{qmldir} file is installed under the appropriate subdirectory below
64\c{Resources/qml} and the module's plugin (if present) is installed under
65\c{PlugIns}. The app bundle is assumed to be installed directly to the base
66installation location (see the \l{#Example}{Example} further below).
67For all other platforms, both the \c{qmldir} and the module's plugin are
68installed under the appropriate subdirectory below \c{qml}, which itself is
69relative to the base installation location.
70
71\c{qt_generate_deploy_qml_app_script()} generates a script whose name will be
72stored in the variable named by the \c{OUTPUT_SCRIPT} option. That script
73is only written at CMake generate-time. It is intended to be used with the
74\l{install(SCRIPT)} command, which should come after the application's target
75has been installed using \l{install(TARGETS)}.
76
77The deployment script will call
78\l qt_deploy_qml_imports() with a suitable set of
79options for the standard install layout. For macOS app bundles and Windows
80targets, it will then also call
81\l qt_deploy_runtime_dependencies(), again
82with suitable options for the standard install layout.
83
84Calling \c{qt_generate_deploy_qml_app_script()} for a platform that is not
85supported by \c{qt_deploy_runtime_dependencies} will result in a fatal error,
86unless the \c{NO_UNSUPPORTED_PLATFORM_ERROR} option is given. When the option
87is given and the project is built for an unsupported platform, neither QML modules
88nor regular runtime dependencies will be installed.
89To ensure that the QML modules are still installed, specify both the
90\c{NO_UNSUPPORTED_PLATFORM_ERROR} and
91\c{DEPLOY_USER_QML_MODULES_ON_UNSUPPORTED_PLATFORM} options.
92The latter option will ensure that QML modules built as part of the project
93are still installed.
94
95On platforms other than macOS, Qt translations are automatically deployed. To
96inhibit this behavior, specify \c{NO_TRANSLATIONS}. Use
97\l qt_deploy_translations() to deploy translations in a
98customized way.
99
100For Windows desktop applications, the required runtime files for the compiler
101are also installed by default. To prevent this, specify \c{NO_COMPILER_RUNTIME}.
102
103Since Qt 6.7, you can use \c{DEPLOY_TOOL_OPTIONS} to pass additional options to
104the underlying deployment tool. This only has an effect if the underlying
105deployment tool is either macdeployqt or windeployqt.
106
107The options \c{PRE_INCLUDE_REGEXES}, \c{PRE_EXCLUDE_REGEXES},
108\c{POST_INCLUDE_REGEXES}, \c{POST_EXCLUDE_REGEXES}, \c{POST_INCLUDE_FILES}, and
109\c{POST_EXCLUDE_FILES} can be specified to control the deployment of runtime
110dependencies. These options do not apply to all platforms and are forwarded
111unmodified to
112\l qt_deploy_runtime_dependencies().
113
114The options \c EXCLUDE_PLUGINS, \c EXCLUDE_PLUGIN_TYPES, \c INCLUDE_PLUGINS, and
115\c INCLUDE_PLUGIN_TYPES are used to select Qt plugins. See
116\l qt_deploy_runtime_dependencies() for their
117documentation.
118
119You can turn off plugin deployment altogether with the \c NO_PLUGINS option.
120
121For deploying a non-QML application, use
122\l qt_generate_deploy_app_script()
123instead. It is an error to call both \c{qt_generate_deploy_qml_app_script()}
124and \l qt_generate_deploy_app_script() for the
125same target.
126
127\sa qt_standard_project_setup(),
128 qt_generate_deploy_app_script()
129
130\section1 Example
131
132The following example shows how to deploy a Qt Quick app.
133
134\badcode
135cmake_minimum_required(VERSION 3.16...3.22)
136project(MyThings)
137
138find_package(Qt6 6.3 REQUIRED COMPONENTS Core Qml)
139qt_standard_project_setup()
140
141qt_add_executable(MyApp main.cpp)
142qt_add_qml_module(MyApp
143 URI Application
144 VERSION 1.0
145 QML_FILES main.qml MyThing.qml
146)
147
148install(TARGETS MyApp
149 BUNDLE DESTINATION .
150 RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
151)
152
153qt_generate_deploy_qml_app_script(
154 TARGET MyApp
155 OUTPUT_SCRIPT deploy_script
156 NO_UNSUPPORTED_PLATFORM_ERROR
157 DEPLOY_USER_QML_MODULES_ON_UNSUPPORTED_PLATFORM
158)
159install(SCRIPT ${deploy_script})
160\endcode
161
162The following example shows how to pass additional options to the underlying
163deployment tool.
164
165\badcode
166set(deploy_tool_options_arg "")
167if(APPLE)
168 set(deploy_tool_options_arg --hardened-runtime)
169elseif(WIN32)
170 set(deploy_tool_options_arg --no-compiler-runtime)
171endif()
172
173qt_generate_deploy_qml_app_script(
174 ...
175 DEPLOY_TOOL_OPTIONS ${deploy_tool_options_arg}
176)
177install(SCRIPT ${deploy_script})
178\endcode
179*/