下载

下载Qt5.14.2

Qt5.14.2的下载地址很多,可以到QT官网下载,也可以到国内镜像站点下载,处于安装速度考虑建议下载离线安装版。

官网下载地址:https://download.qt.io/archive/qt/5.14/5.14.2/

国内镜像站点下载的话可以到清华大学镜像站点下载。

清华大学镜像下载地址:https://mirrors.tuna.tsinghua.edu.cn/qt/archive/qt/5.14/5.14.2/

 

下载upxn

UPXN是一款文件压缩器,它具有目前最先进的文件压缩技术,可以对exe文件进行压缩,同时提供012的压缩级别,级别越高,其压缩的体积就越小,用户可根据自己的需求,选择一款压缩级别对文件进行压缩。文件压缩器还支持对exe文件的图标进行压缩操作。文件压缩器压缩exe文件的速度快、压缩率高,而且其压缩过程绝对不会损坏到文件中的内容,不论是0级压缩还是12级压缩。

在本次实战中下载的是UPXN(文件压缩器)  1.5.9.12 绿色中文版,是在华军软件园下载的,下载地址:

https://www.onlinedown.net/soft/988712.htm

下载Python2

在进行静态编译Qt5.14.2MinGW32 版本时会用到PerlPython进行编译,因为Qt5.14.2自带了Perl所以无需再下载安装,只需安装Python,网上建议的是安装Python2版本(QtWebEngine编译时要求Python2 的版本高于2.7.5),所以这里安装Python2.7.16,也就是Python2的最后一个版本。下载网址:

https://www.python.org/downloads/release/python-2716/

不太熟悉Python的建议下载msi版本的,可以在安装过程中配置python的安装路径到WindowsPATH环境变量中。所以建议按下面的地址下载:

https://www.python.org/ftp/python/2.7.16/python-2.7.16.amd64.msi

 

安装

安装Q5.14.2

将下载下来的qt-opensource-windows-x86-5.14.2.exe以管理员身份执行,会出现账号登录界面,在登录完毕后进入安装组件选择界面,如下图所示:

Qt5.14.2MinGW-32静态编译及压缩过程配置教程_QtCreator

这些编译环境没必要全部选择,只安装项目需要的编辑环境即可,这里为了测试所以安装了MSVC2015 64-bitMSVC2017 64-bitMinGW 7.3.0 32-bitMinGW 7.3.0 64-bit四个编译套件,实际上我常用的是MinGW 7.3.0 32-bit这个编译套件,一般的小程序32位足够了,并且32位的程序在64位系统上也能运行,这也是为什么网上有那么多64位的静态编译套件本篇还要制作32的编译套件的原因。

其它的组件如果不进行Android开发,那么也没有必要选择,这里必须提一点:其它的可以都不选,但是Sources这一项必须选,如果不勾选就没有源代码,也就不能进行本篇剩余的操作了。

除了上述选择外,还需要选择安装Perl,否则将来的源代码没办法编译,所以在Developer and DesignerTool组必须选择MinGW 7.3.0 32-bitQt Creator4.11.1 CDB Debugger Strawberry Perl 5.22.1.3四个组件,安装如下图所示:

Qt5.14.2MinGW-32静态编译及压缩过程配置教程_QtCreator_02

至此,一路下一步直至安装完成。

安装Python2

Python2.7.16的安装过程比较简单,可以在询问如何安装时选择“Install for all users”,这样所有的用户都可以使用Python了。

检查配置

在安装完Qt5.14.2Python2.7.16后可以进行下一步的编译操作了,因为项目的源代码体积非常大编译和安装非常耗时,为避免在操作过程中出错导致从头再来浪费时间(在这里我就有惨痛教训,因为机器上有Python的多个版本,第一次操作时没注意导致编译了一个多小时候发现python版本不对没办法编译),所以可以在编译开始之前检查一下相关工具的安装配置是否正确。

在这里说一下,在我的电脑上Qt5.14.2的安装路径为:C:\Qt\Qt5.14.2,以后的编译和配置中会多次用到这个路径,大家再进行本文中的操作时如果安装路径与本文不一致,请将其换成自己电脑上的真实路径。

从开始菜单打开MinGW7.3.0 32-bit 的编译环境命令行,如下图所示:

Qt5.14.2MinGW-32静态编译及压缩过程配置教程_Qt5静态编译_03

点击后会启动一个命令行窗口,在这个命令行窗口使用的是MinGW 7.3.0 32-bit相关的环境。首先切换到Qt5.14.2的源代码所在路径,在本人电脑上这个路径是:C:\Qt\Qt5.14.2\5.14.2\Src,这个根据实际安装路径来。

检查perl版本

因为在安装Qt5.14.2时选中了StrawberryPerl 5.22.1.3 ,所以可以在命令行窗口输入perl -v命令检查是否安装正确,如果没有出错,证明Perl安装正确。

检查python版本

在命令行输入python -v命令Python是否安装正确以及当前使用的是否是正确的版本,如果使用的不是期望的版本,例如在本人的电脑上安装了多个Python版本,经常使用的并不是python2.7.16,所以在命令行使用了set PATH命令来临时启用python2.7.16作为本命令行窗口中python的默认执行环境。在执行上述命令后会进入python的执行模式,可以使用CTRL+C键来退出Python的执行模式。

整个过程如下图所示:

Qt5.14.2MinGW-32静态编译及压缩过程配置教程_QtCreator_04

注:在python的安装路径已经添加到系统PATH环境变量的前提下,可以不用执行set PATH操作。

静态编译

配置

Qt5.14.2的安装路径下的编译套件目录新建一个mingw73_32_static的文件夹。在这里说一下这几个目录,在本人笔记本上Qt5.14.2的安装目录为C:\Qt\Qt5.14.2,而编译环境的安装目录为C:\Qt\Qt5.14.2\5.14.2,在这个目录下可以看出当前有几个Qt5.14.2的编译套件,如下图所示:

Qt5.14.2MinGW-32静态编译及压缩过程配置教程_Qt5.14.2_05

注意,在上图中我已经建好了mingw73_32_static的文件夹。

接下来会通过配置将编译后的生成输出到C:\Qt\Qt5.14.2\5.14.2\mingw73_32_static这个刚刚建立的目录。

在刚刚打开的命令行窗口中执行命令(请检查是否已经切换到Qt5.14.2的源代码目录,即上图中的Src目录),考虑一些不常用的组件,所以这里忽略了qtwebengineqtwebviewqt3d如果需要这几个模块,把命令最后的-skip qtwebengine -skip qtwebview -skip qt3d即可。

在命令行窗口执行命令:


configure.bat -confirm-license -opensource -platform win32-g++ -mp -debug-and-release -static -prefix C:\Qt\Qt5.14.2\5.14.2\mingw73_32_static -qt-sqlite -qt-zlib -qt-libpng -qt-libjpeg -opengl desktop -qt-freetype -no-qml-debug -no-angle -nomake tests -nomake examples -skip qtwebengine -skip qtwebview -skip qt3d

注意:参数中-prefix参数指定编译结果的存放位置,这里指定的是刚刚创建的mingw73_32_static的文件夹的全路径,如果编译时文件夹路径与本文不同,请根据实际情况更改,如下图所示:

Qt5.14.2MinGW-32静态编译及压缩过程配置教程_Qt5静态编译_06

接下来需要耐心等待一段时间。

编译

在命令行中输入mingw32-make就可以进行编译,但是这种编译效果不佳,为了充分利用硬件的价值可以开启多线程进行编译,这个编译工作我是在一台12核的带有SSD硬盘的工作站上进行的,所以我执行的命令是mingw32-make -12命令,相当于开12个线程进行编译。如果电脑配置较低可以降低线程数,如-j4表示开启4个线程,-j8表示开启8个线程。编译时间根据电脑硬件配置情况而定,当时在工作站上编译工作进行了1个多小时。

安装

在编译完成后在命令上窗口输入mingw32-make install命令即可进行安装,这个安装过程也比较费时间,因为安装完成后的体积也可观,占用了5G多硬盘空间,如下图所示:

 Qt5.14.2MinGW-32静态编译及压缩过程配置教程_QtCreator_07

说明:这个成果是可以复用的,也就是以后如果同事想基于Qt5.41.2 MinGW32进行静态编译,将mingw73_32_static目录发给他再继续下面的配置就可以了,不用每次都这么费时费力去编译。

新增静态编译环境

添加Qt Version

首先,在QtCreator中依次打开“工具”-“选项”-Kits”,点击“Qt Version”选项卡然后点击里面的添加按钮,找到mingw73_32_static编译环境bin目录下的qmake.exe文件,根据本篇的配置这个文件路径是C:\Qt\Qt5.14.2\5.14.2\mingw73_32_static\bin\qmake.exe,然后确定,如下所示:

Qt5.14.2MinGW-32静态编译及压缩过程配置教程_exe压缩_08

添加构建套件

接下来,点击“构建套件Kit”选项卡,点击“添加”按钮添加Kit并将其命名为mingw73_32_static

Qt Version一栏注意选择刚刚添加的Qt Version,即Qt5.14.2(mingw73_32_static),然后编译器和调试器都选择MinGW7.3.032-bit ,如下图所示:

Qt5.14.2MinGW-32静态编译及压缩过程配置教程_Qt5静态编译_09

修改配置文件

经过上述操作之后程序并不能马上就可以进行静态编译,还需要进行配置(网上有些人没做这一步导致编译生成的程序还是需要带着Qtdll运行)。

要修改的配置文件有两个,分别是gcc-base.confg++-win32.conf,这两个文件都在新加的编译套件目录下,在本机上的位置为C:\Qt\Qt5.14.2\5.14.2\mingw73_32_static\mkspecs\common\,如下图所示:

Qt5.14.2MinGW-32静态编译及压缩过程配置教程_exe压缩_10

C:\Qt\Qt5.14.2\5.14.2\mingw73_32_static\mkspecs\common\目录下的gcc-base.conf文件中的QMAKE_LFLAGS参数值改为-static并保存。如下图所示:

Qt5.14.2MinGW-32静态编译及压缩过程配置教程_exe压缩_11

C:\Qt\Qt5.14.2\5.14.2\mingw73_32_static\mkspecs\common\目录下的g++-win32.conf文件中的QMAKE_LFLAGS_DLL参数值改为-static并保存。如下图所示:

Qt5.14.2MinGW-32静态编译及压缩过程配置教程_Qt5.14.2_12

至此,所有的准备工作均已完成,构建项目时使用mingw73_32_static这个构建套件发布release版本时编译出来的exe文件就可以独立执行了。

编译测试

为了验证一下成果,就一Qt5.14.2自带的Exaple为例,这里选择的是“Application Example”这个例子,如下图所示:

Qt5.14.2MinGW-32静态编译及压缩过程配置教程_QtCreator_13

打开“Application Example,选中mingw73_32_static这个构建套件,当然在实际情况中可能是先以别的构建套件调试运行,等需要发布release版的时候再选择mingw73_32_static构建套件,如下图所示:

Qt5.14.2MinGW-32静态编译及压缩过程配置教程_Qt5_14

测试了一下,编译生成的debug版本为613M,生成的release版本为18.9M,而直接使用mingw73_32这个编译套件生成的release版本不带QT动态库的话是61K,带上动态库后的大小为62.9M

exe压缩

打开依据本文链接下载的upxn软件中的UPXN.EXE文件,对生成的release版的程序文件进行压缩,操作界面如下:

Qt5.14.2MinGW-32静态编译及压缩过程配置教程_Qt5静态编译_15

压缩完成后程序体积由19845120字节(即18.9M)压缩到6445056字节(即6.14M),压缩比达到了68%

 

总结

比较大的项目或者正式的项目个人感觉静态发布和动态发布没有太大区别,静态发布适合做的一些小工具软件,毕竟单个文件比一个文件夹传播起来要方便一些。