qt_generate_deploy_qml_app_script
为QML应用生成部署脚本。
该命令定义在Qt6包中的Qml
组件中,可以通过以下方式加载:
find_package(Qt6 REQUIRED COMPONENTS Qml)
此命令是在Qt 6.3中引入的。
警告: 如果您正在使用低于3.19版本的CMake,请确保将MANUAL_FINALIZATION
选项传递给qt6_add_executable(),然后在此函数调用之前调用qt6_finalize_target()。
概要
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...] )
如果无版本命令被禁用,请使用qt6_generate_deploy_qml_app_script()
代替。它支持与该命令相同的参数集。
描述
安装一个既是一个QML模块又是一个可执行目标的目标需要安装目标本身之外的很多东西。Qt库和项目中的其他库、Qt插件和应用程序使用的所有QML模块的运行时部分可能也需要安装。在macOS应用程序包与其他平台相比,安装布局也将不同。《qt_generate_deploy_qml_app_script()
》是一个方便的命令,旨在简化此过程,类似于qt_generate_deploy_app_script()对非QML应用程序所做的。
此命令假定应用程序非常接近于遵循Qt推荐的安装目录结构。该结构基于CMake的默认安装布局,由GNUInstallDirs确定(除了macOS应用程序包,它们遵循Apple的要求)。QML模块安装到平台相应的位置。对于macOS应用程序包,每个QML模块的qmldir
文件被安装在与Resources/qml
相应的子目录下,并且如果有插件,该模块的插件也被安装到PlugIns
。应用程序包假定是直接安装到基本安装位置(见以下示例)。对于所有其他平台,qmldir
和模块的插件都安装在与qml
相应的子目录下,该目录本身相对于基本安装位置。
qt_generate_deploy_qml_app_script()
生成一个脚本,其名称由OUTPUT_SCRIPT
选项命名的变量存储。该脚本仅在CMake生成时写入。它是为了与install(SCRIPT)命令一起使用,该命令应该在应用程序的目标被使用install(TARGETS)安装后使用。
部署脚本将以适用于标准安装布局的适当选项调用 qt_deploy_qml_imports()。对于 macOS 应用程序捆绑包和 Windows 目标,它还会随后调用 qtDeployRuntimeDependencies(),同样适用于标准安装布局。
对于不支持 qtDeployRuntimeDependencies
的平台调用 qt_generate_deploy_qml_app_script()
将会导致致命错误,除非提供了 NO_UNSUPPORTED_PLATFORM_ERROR
选项。当提供了此选项并且项目为不支持的平台构建时,既不会安装 QML 模块也不会安装常规的运行时依赖项。要确保仍然安装 QML 模块,请指定 NO_UNSUPPORTED_PLATFORM_ERROR
和 DEPLOY_USER_QML_MODULES_ON_UNSUPPORTED_PLATFORM
选项。后者选项将确保作为项目一部分构建的 QML 模块仍然被安装。
MACOS_BUNDLE_POST_BUILD
选项在 target
是 macOS 应用程序捆绑包时启用了一个额外的步骤。将创建一个后构建规则,该规则使用部署脚本部署足够的导入的 QML 模块,以允许应用程序直接从构建目录运行(基本上只是 qmldir
文件和插件链接符号)。这对于支持应用程序的开发通常是期望的。MACOS_BUNDLE_POST_BUILD
在所有其他平台上都会被忽略。
在 macOS 以外的平台上,Qt 翻译会被自动部署。要抑制此行为,指定 NO_TRANSLATIONS
。使用 qt_deploy_translations() 以自定义方式部署翻译。
对于 Windows 桌面应用程序,默认情况下也会安装编译器所需的运行时文件。要防止此情况,请指定 NO_COMPILER_RUNTIME
。
从 Qt 6.7 开始,您可以使用 DEPLOY_TOOL_OPTIONS
将额外的选项传递给底层部署工具。这仅适用于底层部署工具是 macdeployqt 或 windeployqt 的情况。
可以指定 PRE_INCLUDE_REGEXES
、PRE_EXCLUDE_REGEXES
、POST_INCLUDE_REGEXES
、POST_EXCLUDE_REGEXES
、POST_INCLUDE_FILES
和 POST_EXCLUDE_FILES
选项来控制运行时依赖的部署。这些选项不适用于所有平台,并且会原样转发到 qt_deploy_runtime_dependencies()。
对于部署非 QML 应用程序,请使用 qt_generate_deploy_app_script()。对同一目标同时调用 qt_generate_deploy_qml_app_script()
和 qt_generate_deploy_app_script() 是错误的。
示例
以下示例显示了如何部署 QtQuick 应用程序。
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})
以下示例显示了如何向底层部署工具传递额外的选项。
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})
另请参阅qt_standard_project_setup() 和 qt_generate_deploy_app_script()。
© 2024 Qt 公司有限。本文件中包含的文档贡献的版权归其各自的所有者。此处提供的文档是根据自由软件基金会发布的 GNU 自由文档许可协议版本 1.3 的条款进行许可的。Qt 及其各自标志是芬兰以及全球的 The Qt Company Ltd. 的商标。所有其他商标均为其各自所有者的财产。