Windows环境下配置Qt5静态编译环境 - sbw Blog

Windows环境下配置Qt5静态编译环境

来源: 石博文博客 | 浏览: 16233 | 评论: 2 发表时间: 2014-08-09

Qt默认是以动态链接库的方式编译和发布程序的,这样的好处是如果有多个程序使用了相同的库文件,那么操作系统只需要加载一份文件在内存中就可以了。不过,当我们发布自己的程序时,就不得不带上许多动态链接库文件,使得程序的总体积增加。在Windows环境下,Qt程序经常以静态编译链接的方式,将需要的库文件链接到程序内部,从而减小文件体积和依赖。



想要进行静态编译,就需要一个静态编译的Qt套件,而编译和后面使用Qt又需要编译好的mingw等工具,所以首先,要下载二进制和源码两种包,当然,根据你的版本要求选择对应的版本,两种Qt可以是不同的版本,这里我们的动态Qt选用了5.3.1版本,而静态的源码包选用的是5.2版本。

Windows环境下配置Qt5静态编译环境
静态编译Qt源码

首先,完全安装Qt的二进制包并做好测试确保可用。这里,我的安装位置为C:\Qt5.3.1,qmake.exe的位置为C:\Qt5.3.1\5.3\mingw482_32\bin\qmake.exe


然后,我们创建静态Qt的安装目录,在这里,我创建了C:\Qt_static这样的目录,解压源码包(到任意目录)并修改(解压目录)\qtbase\mkspecs\win32-g++\qmake.conf中的以下参数:


这里,去除O2优化可以显著提高编译速度,在静态编译目标程序时再使用O2优化结果是相同的。


由于要使用安装好的二进制mingw编译器,我们要配置一下环境变量,在Windows7下,选择计算机-属性-高级系统设置-高级-环境变量中,在当前的用户变量中添加一个变量,变量名为QT_INSTALL_PREFIX,值为静态Qt的安装目录,即我们创建的C:\Qt_static。第二步是系统变量中的Path变量,添加编译工具的目录,这个目录和二进制的Qt安装位置有关,这里我添加的是 C:\Qt5.3.1\Tools\mingw482_32\opt\bin; 和 C:\Qt5.3.1\Tools\mingw482_32\bin; 现在打开一个cmd命令窗口,执行一下mingw32-make -v如果能显示出编译器的版本信息,就说明环境变量设置好了。


一切就绪,打开cmd窗口,cd切换个源码目录(包含configure.bat),执行以下配置命令:


参数是可以参考wiki自定义的,但请不要忘记-static参数,它决定了是以静态方式编译Qt的,另外,-prefix参数指定了安装位置,建议还是指定一下(虽然前面环境变量设置过了)。


配置之后,会生成Makefile文件,此时就可以执行make了:


视编译参数的选择和机器的配置,编译时间可能不太一样,但总是会很漫长,笔者完全编译了所有模块,总共花了4个多小时。编译完成后,可以执行安装:


配置QtCreator

打开二进制安装的QtCreator程序,来到工具-选项-构建和运行-Qt版本这里添加一个Qt版本,路径选择静态编译的qmake.exe位置,在我这里路径为: C:\Qtstatic\bin\qmake.exe 然后来到构建套件这里,复制一个自动检测出的默认套件,只改变Qt版本为静态Qt版本即可。


发布程序时,在项目中选择编译套件为新创建的静态Qt套件,不需要做其它任何改动,不需要修改.pro文件,正常编译即可。在静态编译中,debug和release程序的大小有很大的差别,笔者以一个小程序做了测试,debug编译出来达200MB的程序,在release下编译只有12MB左右。



QT

  • 声明: 评论属于其发表者所有,不代表本站的观点和立场.
  • 路人甲 回复该留言 时间: 2017-07-10

    多谢博主,我在生成makefile文件时候报错,然后去除 -qt-sql-sqlite 这个选项就ok了 qt版本:5.9.1, OS:win7 sp1 mingw:mingw530_32 C:\Users\berry>mingw32-make -v GNU Make 4.1 Built for i686-w64-mingw32

已有 1 位网友发表了一针见血的评论,你还等什么?
  • 昵称: *
  • 邮箱:
  • 网址:
  • 记住我的信息
  • Color
  • Red
  • Blue
  • Code
  • bash
  • cpp
  • css
  • java
  • js
  • perl
  • php
  • python
  • ruby
  • sql
  • xml