Qt 打包依赖 及发布安装程序

1、打包依赖

Qt 官方开发环境使用的动态链接库方式,在发布生成的exe程序时,需要复制一大堆 dll,
如果自己去复制dll,很可能丢三落四,导致exe在别的电脑里无法正常运行。
因此 Qt 官方开发环境里自带了一个工具:windeployqt.exe。
以官方 Qt 5.4.0+MinGW 开发环境为例,
从开始菜单--》Qt 5.4.0--》5.4--》MinGW 4.9 (32-bit)--》Qt 5.4 for Desktop (MinGW 4.9 32 bit),可以打开 Qt 命令行,从这里就可以执行 windeployqt 工具。


集成开发环境 QtCreator 目前生成图形界面程序 exe 大致可以分为两类:
Qt Widgets Application 和 Qt Quick Application。
下面分别介绍这两类exe 的发布方式。


1、Qt Widgets Application可执行程序发布方式
首先用 QtCreator 新建一个 Qt Widgets Application 项目,直接用默认的 QMainWindow 程序就可以了,项目名字假定是 hellomw。
然后以 Release 方式编译生成 exe 程序:
Qt 打包依赖 及发布安装程序

生成的程序运行正常之后,找到项目的生成目录,比如 项目源码路径:
C:\QtPros\hellomw\
它的项目生成目录是
C:\QtPros\build-hellomw-Desktop_Qt_5_4_0_MinGW_32bit-Release\
进入这个文件夹,在进入它的子文件夹 release 里面,找到 hellomw.exe ,
将这个exe 复制到一个新的单独的文件夹里用于发布,比如存到 
D:\hellomw\ 文件夹里面。


然后从开始菜单打开 Qt 命令行,输入命令 :
cd /d D:\hellomw
然后使用 windeployqt 工具命令:
windeployqt hellomw.exe
Qt 打包依赖 及发布安装程序

然后可以在 D:\hellomw 文件夹里看到 windeployqt 工具自动复制的插件文件夹
和 dll文件、qm文件。这时候得到的就完整的 exe 程序发布集合,依赖关系都解决好了。
Qt 打包依赖 及发布安装程序

把 D:\hellomw 文件夹 打包就可以发布了,不用自己一个个找 dll 文件了。
D:\hellomw 文件夹里的qm文件是多国语言翻译文件,不需要可以删了,
其他的都保留。


2、Qt Quick Application发布方式
首先用 QtCreator 新建一个 Qt Quick Application 项目,直接用默认的项目模版,点击下一步生成项目,项目名字假定是 helloqml。
然后以 Release 方式编译生成 exe 程序:
Qt 打包依赖 及发布安装程序

然后找到项目的构建目录,比如项目源码目录 C:\QtPros\helloqml,
它的构建目录是:
C:\QtPros\build-helloqml-Desktop_Qt_5_4_0_MinGW_32bit-Release\
进入这个目录,再进入 release 子文件夹,找到 helloqml.exe ,
复制到一个新的单独的文件夹里面,比如 D:\helloqml\ 文件夹里面。


然后从开始菜单打开 Qt 命令行,进入D:\helloqml\文件夹:
cd /d D:\helloqml
然后使用 windeployqt 

windeployqt 在下载的Qt压缩包里自带

Qt 打包依赖 及发布安装程序

windeployqt 工具命令:
windeployqt helloqml.exe --qmldir C:\Qt\Qt5.4.0\5.4\mingw491_32\qml
Qt 打包依赖 及发布安装程序

注意不要跟烧包一样照抄上条命令,--qmldir 是指出 Qt 库里面的 qml 文件夹位置,
上面命令里 C:\Qt\Qt5.4.0 是 Qt 官方开发环境安装的文件夹,
C:\Qt\Qt5.4.0\5.4\mingw491_32 是Qt类库的目录(QTDIR),
因此使用的 --qmldir 后面写的是 C:\Qt\Qt5.4.0\5.4\mingw491_32\qml 
读者Qt环境安装路径不一样,要根据实际情况修改!


然后可以看到 D:\helloqml 文件夹里有一大堆文件,就是 QtQuick程序需要的依赖文件。
将整个 D:\helloqml 文件夹 打包就可以发布出去,在别的电脑上使用。
Qt 打包依赖 及发布安装程序

这个 D:\helloqml 文件夹里的东西很多,看不懂就不要删,老老实实打包发布就行了。


上面是最简单的程序发布,实际复杂程序可能还带一些图片文件、数据库文件、配置文件之类的,可以按自己需要复制这些文件到发布文件夹里面

2、发布安装程序

1、NSIS简介
(1)NSIS是什么?
    一款免费的Win32安装、卸载系统!
(2)NSIS有什么特点?
    脚本简洁高效、系统开销小,进行安装、卸载、设置、解压文件也不在话下,几乎可以做所有的事情。

2、工具

    NSIS Edit + NSIS
   只需下载 HM NIS Edit

3、使用方式
    脚本向导 + 修改代码 = 个性化安装包

准备文件
    以下是我即将打包的所有文件,安装包目录结构(包括:可执行程序、插件库、运行时库、授权文件、卸载程序图标等等!)如下图所示:
Qt 打包依赖 及发布安装程序
1、利用向导制作安装包:
Qt 打包依赖 及发布安装程序

2、填写应用程序基本信息

Qt 打包依赖 及发布安装程序

3、指定安装程序所用选项
    注意:这里选择语言为SimpChinese
Qt 打包依赖 及发布安装程序

4、设置应用程序安装目录与授权文件(授权文件必须提前写好)

Qt 打包依赖 及发布安装程序

5、指定应用程序文件(直接选择windeployqt打包好的文件夹,minSection选择exe文件)

Qt 打包依赖 及发布安装程序

6、指定创建应用程序图标

Qt 打包依赖 及发布安装程序

7、选择安装程序完成后运行的动作(自述文件必须存在)

Qt 打包依赖 及发布安装程序

8、指定接触安装程序属性

Qt 打包依赖 及发布安装程序

9、进行脚本编译、保存

Qt 打包依赖 及发布安装程序

10、等待编译完成,即可运行打包后的安装包
Qt 打包依赖 及发布安装程序

    大功告成之后,即可进行安装!

(1)安装程序

Qt 打包依赖 及发布安装程序

(2)此处显示授权文件中的内容

Qt 打包依赖 及发布安装程序

(3)选择安装目录

Qt 打包依赖 及发布安装程序

(4)运行程序,并显示“自述文件”

Qt 打包依赖 及发布安装程序

(5)运行结果

Qt 打包依赖 及发布安装程序

    关于Qt的打包工具了解一些,个人感觉NSIS用起来比较顺手,脚本修改起来也方便,所以就推崇一下。。。若想将安装包变得更加美观,则需要手动修改脚本,更多信息请查找相关资料,此处不再多做介绍!
注意如果有图片等资源,windeployqt是不会把他们打包的,需要手动复制到打包好的目录下。