Qt程序发布与打包

本文最后更新于:2023年9月14日 下午

Qt 程序发布与打包(2 种方式)

  当 Qt 程序编写完成通过 IDE 编译后就可以得到对应的可执行程序.exe,这个可执行程序在本机本地运行是完全没有问题的(因为在本机本地有对应的 Qt 环境,程序运行过程中可以自动加载到相关的动态库),但是如果我们想把这个 Qt 程序给到其他人使用可能就会出问题了,因为其他人的机器上可能并不具有相应的 Qt 编译环境,所以我们需要将 Qt 程序以及所需的资源一起发布打包给别人,这样在其他机器上不需要 Qt 编译环境也可运行你的 Qt 程序。

参考:

Qt 程序的发布和打包 | 爱编程的大丙

CSDN博客:QT 软件打包为一个单独可执行.exe文件流程

一、生成 release 版本程序

  相较于 Debug 版本程序,Release 版本程序更加简洁,并且程序大小也会相对小一些,一般打包发布采用 Release 版本的可执行文件.exe。选择构建选项 Release 版本,生成可执行文件.exe,进入 Release 版本可执行文件所在文件夹,即可找到生成的.exe 文件。注意!!!要保证 Qt 所使用的编译器 bin 路径已添加到环境变量 path 中,否则执行 windeployqt 时会漏掉某些动态库文件。

二、可执行文件部署工具 windeployqt

  生成的可执行程序在运行的时候需要加载相关的 Qt 库文件,因此需要将这些动态库一并发布给使用者,Qt 官方给我们提供了相关的发布工具,通过这个工具就可以非常轻松的找出这些动态库文件了,这个工具叫做 windeployqt.exe,该文件位于 Qt 安装目录的编译套件目录的 bin 目录中,以我本地为例D:.2\5.14.2_64,如果需要在当前操作系统的任意目录下都可以访问 windeployqt.exe,则需要将此路径设置到环境变量中。

  另外使用过程中有出现过程序入口无法定位到动态链接库,无法载入QtCore.dll的情况,将环境变量按如下排列,并重启电脑解决。

环境变量排列

  将 Release 版本可执行文件复制到一个新的空的文件夹中,在文件夹中按住 Shift+右键,打开 PowerShell,输入以下命令:

1
2
3
# LordCard.exe 是可执行程序的名字
# windeployqt.exe 的后缀 .exe 可以省略不写
windeployqt.exe Landlors.exe

  使用这种方式 Qt 会将一些用不到的动态库也拷贝到当前的目录中,如果确定用不到可以手动将其删除,如果不在意这些,完全可以不用理会,更倾向选择后者。现在一个绿色免安装版的程序就得到了,可以将这个目录打个压缩包发送给自己的小伙伴,但是这种方式终究比较 low,我们可以将这个目录中的文件制作成一个安装包,这样就类似于我们在网上下载的安装包程序一样了。

三、程序打包发布(2 种方式)

  将应用程序和相关的动态库打包成安装包的工具有很多,现介绍两种方式(工具)Inno Setup 和 Enigma Virtual Box。

(1)方式 1

Inno Setup,是一个免费的 Windows 安装程序制作软件,小巧、简便、精美。

特点:为应用程序创建安装程序,可自定义应用程序图标,加密安装,自动添加卸载程序,安装后以目录形式存在

下载地址:Inno Setup Downloads

1.创建向导

  点击 File→New,创建脚本向导文件,不要勾选创建一个新的空脚本文件。

inno setup script wizard

2.填写相关的应用程序信息

  填写程序的相关信息,包括应用程序名称、应用程序版本、应用程序发布者以及应用程序网址。

ApplicationInfo

3.指定应用程序的安装目录相关的信息

  设置应用程序安装时的默认安装路径信息。

applicationFolder

4.选择可执行程序和相关的动态库

  选择前述 windeployqt 所执行的文件夹路径,选择.exe 可执行文件,选择动态库文件目录。

applicationFile

  由于可执行程序关系的动态库有很多,所以可以直接添加动态库的目录,选中对应的目录之后,如果里边还有子目录会弹出如下对话框,选择是即可,需要包含这些子目录。

confirm

5.可执行程序文件格式设置关联

  给可执行程序关联本地的某种格式的磁盘文件(比如记事本程序会自动关联本地的 .txt 文件),对于我的可执行程序来说无需关联,因此没有做任何设置,直接下一步。

association

6.创建快捷方式

  给应用程序创建快捷方式,此处没有进行任何设置,使用的默认选项。

shortcuts

7.指定许可文件

  指定许可文件,文件中的内容会显示到安装向导的相关窗口中,可以选择不指定,直接跳过。

documention

8.安装模式(All User or Current User)

  选择安装模式(给系统的当前用户安装还是给所有用户安装),根据自己喜好指定即可。

install mode

9.选择安装语言

  打包工具不提供中文。

setup language

10.指定安装包文件的相关信息

compiler setting

11.完成打包生成安装程序

  勾选Yes,use #define compiler directives

setup preprocessor

  编译生成的脚本文件。

compile script

  保存脚本文件生成安装包。

save script

  编译完成之后,生成的安装包文件在保存脚本文件的目录中。

script

(2)方式 2

Enigma Virtual Box,是软件虚拟化工具,它可以将多个文件封装到应用程序主文件,从而制作成为单执行文件的绿色软件。它支持所有类型的文件格式,虚拟化后的软件不释放任何临时文件到您的硬盘,文件模拟过程仅在内存运行。

特点:能够多个文件封装到单个应用程序主文件.exe 直接运行,但不能自定义程序图标。

下载地址:Enigma Virtual Box Downloads

1.选择需要封包的主程序并设置封包后的程序另存路径

选择待封装程序及设置封装程序的另存路径

2.增加文件夹[递归]

  选择前述 windeployqt 所执行的文件夹路径,确定添加%DEFAULT FOLDER%

添加动态链接库文件

3.文件选项

  勾选文件压缩。

勾选文件压缩

4.执行封包

  生成单个执行文件.exe,可直接运行。

执行封包