部署
使用 Qt 的 CMake 部署 API 为桌面平台部署 Qt 项目。该 API 支持各种目标平台,你可以在qt_generate_deploy_app_script()文档中找到相关信息。
部署过程取决于您的项目是Qt Widgets 应用程序还是Qt Quick 应用程序。即使您只计划部署Qt Quick 应用程序,也请先阅读有关部署Qt Widgets 应用程序的内容,以了解部署过程。
部署Qt Widgets 应用程序
本节以一个简单的 C++ Qt 项目为例,说明如何部署Qt Widgets 应用程序。
cmake_minimum_required(VERSION 3.16) project(MyApp VERSION 1.0.0 LANGUAGES CXX) set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) find_package(Qt6 REQUIRED COMPONENTS Core) qt_standard_project_setup() qt_add_executable(MyApp main.cpp) target_link_libraries(MyApp PRIVATE Qt6::Core)
您需要指示 CMake 将应用程序目标安装到适当位置。在 macOS 上,捆绑包会直接安装到${CMAKE_INSTALL_PREFIX}
,在其他平台上则安装到"bin"
目录下。
install(TARGETS MyApp BUNDLE DESTINATION . RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} )
请注意,qt_standard_project_setup()会引入 CMake 的GNUInstallDirs.cmake
。这就是CMAKE_INSTALL_BINDIR
变量的定义。
你还需要生成一个部署脚本。部署脚本是在安装时执行的 CMake 代码。该代码负责收集运行时依赖项,并将它们复制到安装目录。
qt_generate_deploy_app_script( TARGET MyApp OUTPUT_SCRIPT deploy_script NO_UNSUPPORTED_PLATFORM_ERROR ) install(SCRIPT ${deploy_script})
qt_generate_deploy_app_script()命令会在构建目录中生成部署脚本。生成的脚本文件的文件名保存在deploy_script
变量中。install(SCRIPT)
调用会指示 CMake 在安装时运行脚本。
与其他基于 CMake 的项目一样,该项目可通过cmake --install .
或ninja install
安装。安装完成后,安装目录将包含运行应用程序所需的共享库和资产。换句话说,安装后会生成一个独立的目录,可以随时打包,例如通过cpack
打包。
部署Qt Quick 应用程序
部署Qt Quick 项目需要使用不同的命令来生成部署脚本。其余步骤与部署Qt Widgets 应用程序类似。
首先,创建Qt Quick 应用程序。
cmake_minimum_required(VERSION 3.16) project(MyApp VERSION 1.0.0 LANGUAGES CXX) set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) find_package(Qt6 REQUIRED COMPONENTS Core) 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(),而不是qt_generate_deploy_app_script()。
qt_generate_deploy_qml_app_script( TARGET MyApp OUTPUT_SCRIPT deploy_script ) install(SCRIPT ${deploy_script})
安装时,应用程序二进制文件将被部署,包括 QML 文件以及项目使用的 Qt 共享库和资产。同样,生成的目录是独立的,可由cpack
等工具打包。
© 2025 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.