Qt使用windeployqt工具进行打包

在了解如何打包之前先讨论一下qt的打包环境

1、debug和release的选择

对于qt-creator来说,debug最大的优势在于方便调试,但是随之而来的便是巨大内存的库加载,对于现代的电脑来说一两个G的占用并不算大,所以在代码只需要在自己电脑上面运行和供于学习来说无可厚非。
但是当我们想要将写好的代码发送给顾客,而发送者的电脑上又没有qt的运行环境,这个时候打包成为必不可少的步骤
对于打包来说,debug版本比release版本的内存大十倍不止。所以如果有想打包操作的话,最好是一开始就选择release进行打包

2、对于目标机上有qt的运行环境(环境变量里面有qt的bin目录的话)

环境变量可以在控制面板->系统和安全->系统->高级系统设置->环境变量->path里面添加qt的bin目录,一般在mingw里面。

在qt-creator或者vs里构建了某个程序,如果是debug版本的就会在放置的文件目录下生成build-xxx-debug文件夹,如果运行程序后里面会出现一个xxx.exe的可执行文件如下图:

qt CentOS 程序打包 qt 打包工具_qt CentOS 程序打包


可以直接复制该exe文件发送,能够在任何拥有qt环境的主机或者开发板上面运行(可以大胆的分享我们的代码成果!)

目标没有qt的运行环境

我做了一个很好玩很有趣的游戏,我现在想分享给我心仪的女生,怎么办?
总不能跑过去给她电脑上面装一个qt吧,你行你上我反正不行,游戏里面做了很多表达心意的东西。我就想让她一打开就能运行,那么正事开始了

1、选用release

在创建工程的时候就可以选择,勾上Release,debug最好也勾上,方便调试

qt CentOS 程序打包 qt 打包工具_qt CentOS 程序打包_02


选好后进去编好程序,运行的时候当然可以拿debug进行调试,等调试没问题后,在左边项目选项里面的构建设置添加一个release版本的,再构建一次,就会再工作目录里面生成另外一个build-xxx-release的文件夹。
我们所操作的就是该文件夹。

qt CentOS 程序打包 qt 打包工具_qt_03

2、使用Qt xxx for DeskTop(xxx是版本号)

做好上面的之后就可以利用官方工具windeployqt来进行打包了(当然有别的方法,感兴趣的可以多查查资料)。

windeployqt是qt自带的exe文件,可以在工作目录里面找到,但是本文建议在qt自带的cmd里面操作,也就是qt xxx for DeskTop(不要用win + R 打开的cmd),windows自带的cmd打包后会损失很多链接库,造成打包后目标打不开的情况。

【1】打开qt for desktop,转到要打包的build-xxx-release目录,和windows自带的cmd使用方式一样。

qt CentOS 程序打包 qt 打包工具_qt CentOS 程序打包_04


【2】输入F:到F盘,或者用cd F命令也是一样的,到qt的工作目录下(创建qt程序的时候自己指定的目录),再进入build-xxx-release目录里面,输入windeployqt xxx.exe,就会加载所有的依赖文件和翻译文件(注:xxx.exe必须是存在的文件名也就是目标可执行文件)。

qt CentOS 程序打包 qt 打包工具_环境变量_05


出现上图情况后,就说明打包已经完成了,这个时候将build-xxx.release文件里面的整个release文件夹里面的exe文件就能够在没有qt环境的电脑上面运行了。

3、将整个release文件夹打包

qt CentOS 程序打包 qt 打包工具_qt_06


如果能力很强的话可以尝试使用NSIS(Nullsoft Scriptable InstallSystem)软件对该文件夹压缩后进行程序的封装,不进行封装也行,将该release文件夹压缩发出去,只要下载了整个文件夹,打开里面的exe文件,就能在没有qt运行环境的机器上面运行了。

<补充说明一下,测试打包程序是否成功,最好是在一台没有安装qt运行环境的电脑上测试,自己的电脑就算打包后缺少某些依赖文件也可能成功运行,因为你的环境变量已经设置好了,qt会进行库的共享!>
本文只能做一篇建议文章,如果有需要改进的地方,欢迎指出,一起讨论,一起进步!