aboutsummaryrefslogtreecommitdiffstats
path: root/src/qml/doc/src/cmake/qt_generate_deploy_qml_app_script.qdoc
diff options
context:
space:
mode:
Diffstat (limited to 'src/qml/doc/src/cmake/qt_generate_deploy_qml_app_script.qdoc')
-rw-r--r--src/qml/doc/src/cmake/qt_generate_deploy_qml_app_script.qdoc177
1 files changed, 177 insertions, 0 deletions
diff --git a/src/qml/doc/src/cmake/qt_generate_deploy_qml_app_script.qdoc b/src/qml/doc/src/cmake/qt_generate_deploy_qml_app_script.qdoc
new file mode 100644
index 0000000000..0d5088e7e5
--- /dev/null
+++ b/src/qml/doc/src/cmake/qt_generate_deploy_qml_app_script.qdoc
@@ -0,0 +1,177 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+/*!
+\page qt-generate-deploy-qml-app-script.html
+\ingroup cmake-commands-qtqml
+
+\title qt_generate_deploy_qml_app_script
+\target qt6_generate_deploy_qml_app_script
+
+\summary {Generate a deployment script for a QML application.}
+
+\include cmake-find-package-qml.qdocinc
+
+\cmakecommandsince 6.3
+
+\include cmake-qml-qt-finalize-target-warning.qdocinc warning
+
+\section1 Synopsis
+
+\badcode
+qt_generate_deploy_qml_app_script(
+ TARGET <target>
+ OUTPUT_SCRIPT <var>
+ [NO_UNSUPPORTED_PLATFORM_ERROR]
+ [NO_TRANSLATIONS]
+ [NO_COMPILER_RUNTIME]
+ [DEPLOY_TOOL_OPTIONS ...]
+ [DEPLOY_USER_QML_MODULES_ON_UNSUPPORTED_PLATFORM]
+ [MACOS_BUNDLE_POST_BUILD]
+ [PRE_INCLUDE_REGEXES regexes...]
+ [PRE_EXCLUDE_REGEXES regexes...]
+ [POST_INCLUDE_REGEXES regexes...]
+ [POST_EXCLUDE_REGEXES regexes...]
+ [POST_INCLUDE_FILES files...]
+ [POST_EXCLUDE_FILES files...]
+)
+\endcode
+
+\versionlessCMakeCommandsNote qt6_generate_deploy_qml_app_script()
+
+\section1 Description
+
+Installing an executable target that is also a QML module requires deploying
+a number of things in addition to the target itself. Qt libraries and other
+libraries from the project, Qt plugins, and the runtime parts of all QML modules
+the application uses may all need to be installed too. The installed layout
+is also going to be different for macOS app bundles compared to other platforms.
+The \c{qt_generate_deploy_qml_app_script()} is a convenience command intended
+to simplify that process, similar to what
+\l{qt6_generate_deploy_app_script}{qt_generate_deploy_app_script()} does for
+non-QML applications.
+
+The command expects the application to follow Qt's recommended install
+directory structure fairly closely. That structure is based on CMake's default
+install layout, as determined by \l{GNUInstallDirs} (except for macOS app
+bundles, which follow Apple's requirements instead). QML modules are installed
+to the appropriate location for the platform. For macOS bundles, each QML
+module's \c{qmldir} file is installed under the appropriate subdirectory below
+\c{Resources/qml} and the module's plugin (if present) is installed under
+\c{PlugIns}. The app bundle is assumed to be installed directly to the base
+installation location (see the \l{Example} further below). For all other platforms,
+both the \c{qmldir} and the module's plugin are installed under the appropriate
+subdirectory below \c{qml}, which itself is relative to the base installation
+location.
+
+\c{qt_generate_deploy_qml_app_script()} generates a script whose name will be
+stored in the variable named by the \c{OUTPUT_SCRIPT} option. That script
+is only written at CMake generate-time. It is intended to be used with the
+\l{install(SCRIPT)} command, which should come after the application's target
+has been installed using \l{install(TARGETS)}.
+
+The deployment script will call
+\l{qt6_deploy_qml_imports}{qt_deploy_qml_imports()} with a suitable set of
+options for the standard install layout. For macOS app bundles and Windows
+targets, it will then also call
+\l{qt6_deploy_runtime_dependencies}{qt_deploy_runtime_dependencies()}, again
+with suitable options for the standard install layout.
+
+Calling \c{qt_generate_deploy_qml_app_script()} for a platform that is not
+supported by \c{qt_deploy_runtime_dependencies} will result in a fatal error,
+unless the \c{NO_UNSUPPORTED_PLATFORM_ERROR} option is given. When the option
+is given and the project is built for an unsupported platform, neither QML modules
+nor regular runtime dependencies will be installed.
+To ensure that the QML modules are still installed, specify both the
+\c{NO_UNSUPPORTED_PLATFORM_ERROR} and
+\c{DEPLOY_USER_QML_MODULES_ON_UNSUPPORTED_PLATFORM} options.
+The latter option will ensure that QML modules built as part of the project
+are still installed.
+
+The \c{MACOS_BUNDLE_POST_BUILD} option enables an extra step when \c{target}
+is a macOS app bundle. A post-build rule will be created which uses the
+deployment script to deploy enough of the imported QML modules to allow the
+application to run directly from the build directory (essentially just the
+\c{qmldir} files and symlinks to plugins). This is usually desirable to support
+development of the application. \c{MACOS_BUNDLE_POST_BUILD} is ignored for all
+other platforms.
+
+On platforms other than macOS, Qt translations are automatically deployed. To
+inhibit this behavior, specify \c{NO_TRANSLATIONS}. Use
+\l{qt_deploy_translations}{qt_deploy_translations()} to deploy translations in a
+customized way.
+
+For Windows desktop applications, the required runtime files for the compiler
+are also installed by default. To prevent this, specify \c{NO_COMPILER_RUNTIME}.
+
+Since Qt 6.7, you can use \c{DEPLOY_TOOL_OPTIONS} to pass additional options to
+the underlying deployment tool. This only has an effect if the underlying
+deployment tool is either macdeployqt or windeployqt.
+
+The options \c{PRE_INCLUDE_REGEXES}, \c{PRE_EXCLUDE_REGEXES},
+\c{POST_INCLUDE_REGEXES}, \c{POST_EXCLUDE_REGEXES}, \c{POST_INCLUDE_FILES}, and
+\c{POST_EXCLUDE_FILES} can be specified to control the deployment of runtime
+dependencies. These options do not apply to all platforms and are forwarded
+unmodified to
+\l{qt6_deploy_runtime_dependencies}{qt_deploy_runtime_dependencies()}.
+
+For deploying a non-QML application, use
+\l{qt6_generate_deploy_app_script}{qt_generate_deploy_app_script()}
+instead. It is an error to call both \c{qt_generate_deploy_qml_app_script()}
+and \l{qt6_generate_deploy_app_script}{qt_generate_deploy_app_script()} for the
+same target.
+
+\sa {qt6_standard_project_setup}{qt_standard_project_setup()},
+ {qt6_generate_deploy_app_script}{qt_generate_deploy_app_script()}
+
+\section1 Example
+
+The following example shows how to deploy a QtQuick app.
+
+\badcode
+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
+ MACOS_BUNDLE_POST_BUILD
+ NO_UNSUPPORTED_PLATFORM_ERROR
+ DEPLOY_USER_QML_MODULES_ON_UNSUPPORTED_PLATFORM
+)
+install(SCRIPT ${deploy_script})
+\endcode
+
+The following example shows how to pass additional options to the underlying
+deployment tool.
+
+\badcode
+set(deploy_tool_options_arg "")
+if(APPLE)
+ set(deploy_tool_options_arg --hardened-runtime)
+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})
+\endcode
+*/