打包Qt程序的脚本package.bat

要将 Qt Release 编译后的程序打包成绿色工具(即免安装、可直接拷贝运行的文件夹),需要复制程序依赖的 Qt 库、运行时库,并通过工具自动收集依赖。以下是不同场景的打包命令 / 步骤(Windows 环境):

一、基础场景:用 windeployqt 自动收集依赖(推荐)

windeployqt 是 Qt 自带的工具,能自动识别 Release 程序依赖的 Qt 库、插件、运行时文件,一键生成绿色包。

操作步骤:

编译 Release 程序:

在 Qt Creator 中选择「Release」模式,编译项目,生成 xxx.exe(路径:项目目录/build-xxx-Release/release/xxx.exe)。

打开 Qt 命令行终端:

从开始菜单启动「Qt 5.15.x (MinGW 8.1.0 64-bit)」或「Qt 5.15.x (MSVC 2019 64-bit)」终端(必须用对应编译器的终端,否则路径不对)。

执行 windeployqt 命令:

bash

运行

步骤1:切换到 Release 程序所在目录

cd /d 项目目录/build-xxx-Release/release

步骤2:执行打包命令(生成绿色包到当前目录)

windeployqt xxx.exe

补充系统运行时库:

若用 MinGW 编译:需手动拷贝 MinGW 的运行时库(路径:Qt安装目录/5.15.2/mingw81_64/bin/ 下的 libgcc_s_seh-1.dll、libstdc+±6.dll、libwinpthread-1.dll)到绿色包目录。

若用 MSVC 编译:需确保目标电脑已安装 Visual C++ 2019 运行库,或手动拷贝 MSVC 运行时库(如 vcruntime140.dll)到绿色包目录。

二、进阶场景:用脚本一键打包(含运行时 + 压缩)

可写一个批处理脚本,自动完成 windeployqt、拷贝运行时、压缩绿色包的流程:

示例脚本(package.bat ):

batch

@echo off

set "QT_PATH=D:\Qt\5.15.2\mingw81_64" # 替换为你的Qt安装路径

set "EXE_PATH=项目目录/build-xxx-Release/release/xxx.exe" # 替换为你的Release程序路径

set "OUT_DIR=绿色包输出目录" # 替换为输出目录

:: 1. 创建输出目录

mkdir "%OUT_DIR%"

:: 2. 复制Release程序到输出目录

copy "%EXE_PATH%" "%OUT_DIR%"

:: 3. 用windeployqt收集Qt依赖

call "%QT_PATH%\bin\windeployqt.exe" "%OUT_DIR%\xxx.exe" --release --no-translations

:: 4. 拷贝MinGW运行时库(MinGW编译时用)

copy "%QT_PATH%\bin\libgcc_s_seh-1.dll" "%OUT_DIR%"

copy "%QT_PATH%\bin\libstdc+±6.dll" "%OUT_DIR%"

copy "%QT_PATH%\bin\libwinpthread-1.dll" "%OUT_DIR%"

:: 5. 压缩为ZIP包(可选)

powershell Compress-Archive -Path "%OUT_DIR%*" -DestinationPath "%OUT_DIR%.zip"

echo 绿色包已生成到:%OUT_DIR%

pause

三、注意事项

插件依赖:若程序用到 Qt 插件(如数据库驱动、图像格式插件),windeployqt 会自动拷贝到 plugins 目录,无需手动处理。

第三方库:若程序依赖非 Qt 的第三方库(如 OpenCV),需手动将对应的 .dll 拷贝到绿色包目录。

无控制台窗口:若程序是 GUI 程序,编译时需在 .pro 文件中添加 CONFIG += windows(MinGW)或 CONFIG += console 改为 CONFIG -= console(MSVC),避免打包后出现控制台黑框。

总结

最便捷的方式是用 windeployqt 自动收集依赖,再补充对应编译器的运行时库,即可生成可直接拷贝运行的绿色包。

相关推荐
aramae25 分钟前
MySQL内置函数(7)
开发语言·笔记·后端·mysql·其他
码行山野赴时序归途3 小时前
链表家族收官篇:循环链表
c语言·开发语言·数据结构·链表
景熙55234 小时前
单体项目编写思路和落地形式
java·开发语言
计算机毕设定制辅导-无忧学长4 小时前
《基于SpringBoot的未成年人健康知识科普平台的设计与实现》
java·开发语言·vue.js·spring boot·未成年人健康知识科普平台
Ivanqhz5 小时前
Ping-Pong 双缓冲
开发语言·人工智能·python·深度学习·mlir
m0_734571765 小时前
深入理解C++ RAII
开发语言·c++
泡海椒5 小时前
jquick-pdf 表格实战:动态数据 PDF 报表生成
java·开发语言·pdf
aramae5 小时前
模拟实现memset()(C语言)
c语言·开发语言·后端
wuyk5555 小时前
【Socket 进阶之路】第 7 章 IO 多路复用 select & poll 完整实战|多 fd 监听、超时等待、优缺点横向对比
服务器·开发语言·网络·数据库·物联网
船厂电气自动化ai大模型5 小时前
AI大模型与数学|第81天 课程:正交向量、正交基、格拉姆‑施密特(Gram‑Schmidt)正交化
开发语言·数据结构·人工智能·线性代数·机器学习