Qt程序中优雅的打包方案

Qt程序中优雅的打包方案

随笔 📅 2021-03-31 ⏱ 约 11 分钟
✦
AI 摘要AI Abstract
  • Qt程序打包可通过内置工具windeployqt.exe实现一键自动化部署
  • 使用windeployqt前需准备Release版exe及依赖文件,并确保路径不含中文
  • 通过Qt对应编译器控制台运行windeployqt命令,自动复制所需dll等依赖库

1

Qt程序打包,没有想象中那么复杂。

发现问题

在使用 Qt C++ 发布生成 *.exe 时,需要复制大量 dll 动态链接库文件,这一点相信每一个 Qt 开发者都经历过。除了手动复制,能不能有一种更优雅的解决方案呢?

问题调研

在当前的主流语言中,打包方式可谓是大道至简。使用 C++ 时,你可以通过 Visual Studio 自带的打包插件完成打包;使用 Python 时,你可以借助 PyInstaller 这样的打包工具执行命令完成打包; 使用 Golang 时,你可以借助它自带的打包工具执行命令完成打包…

Qt 官方为了解决这一问题,早就在 Qt 安装时内置一个一键打包程序 —— wideployqt.exe。

解决方案

windeployqt.exe 使用教程

1. 准备文件

  • 一个 release 模式下编译好的 exe;
  • 其他非系统库;
  • exe 启动时读取的目录或文件等。

准备好上述文件后,将它们拷贝至一个新建的文件夹中,文件夹路径和命名不能包含中文。

image-20210402115944384

2. 启动 Qt 对应编译器的控制台程序

我使用的 MinGW 5.3.0 , 故选择图中这个控制台程序。

                                          ![image-20210402133306270](https://p.amoswu.top/post/DTGYN.png)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     

3.在控制台打开编译好的 exe 所在路径

image-20210402133627859

4. 输入打包命令开始打包

打开对应路径后,输入下方的打包命令,即可开始打包。

windeployqt [exe文件名]

image-20210402133900186

稍等片刻,打开文件夹你会看到,所有的 dll 库已经拷贝完成了,我们可以打开 exe 试一试打包是否成功。

image-20210402134034013

参考链接

[1] 新浪博客 - Qt之打包发布(NSIS详解)

[2] CSDN - 教你使用windeployqt工具来进行Qt的打包发布

评论