Windows下编译QT 4.6.2
编译准备
下载NOKIA网站上的QT SDK,解压或安装到相关目录。
本文以QT
4.6.2为例,下载地址:
http://get.qt.nokia.com/qt/source/qt-win-opensource-4.6.2-vs2008.exe
或者直接下载源码:
http://get.qt.nokia.com/qt/source/qt-everywhere-opensource-src-4.6.2.zip
下载后安装好的目录结构为(假设安装到D:QT):
1 | ├─share |
configure配置工具在qt目录,以下假设QTDIR=D:QTSDKqt,编译前最好清空lib,demos,examples,docs四个目录,配置完成后在这几个目录下放一个空的Makefile文件,避免make时报错。
VS2005动态编译
1.设置VS2005的环境变量
2.设置目标平台
set QMAKESPEC=win32-msvc2005
3.进入QTDIR目录运行配置,生成Makefile文件
1 | configure -platform win32-msvc2005 -release -opensource -shared -fast |
4.运行nmake /I /K(附带/I /K
选项可以避免出现错误时编译自动终止,用于跳过错误继续编译其它文件)
经过这样编译的Qt库不依赖mingwm10.dll,libgcc_s_dw2-1.dll,但依赖Qt库的Dll文件和微软的CRT运行时库,使用此Qt库编译Windows平台下的程序,发布时需带上用到的Qt链接库Dll文件和微软的CRT运行时库Dll文件。
VS2005静态编译
(VS2008编译同理,启动相应的命令行,设置相应的目标平台,修改相应的配置文件)
1.设置VS2005的环境变量
2.设置目标平台
set QMAKESPEC=win32-msvc2005
3.修改mkspecs/win32-msvc2005目录下的配置文件qmake.conf
将下面两行:
1 | QMAKE\_CFLAGS\_RELEASE = -O2 -MD |
修改为:
1 | QMAKE\_CFLAGS\_RELEASE = -O2 -MT |
(D是指dynamic,T是指static,d是指debug)
4.进入QTDIR目录,运行配置,生成Makefile文件
1 | set QMAKESPEC=win32-msvc2005 |
5.运行运行nmake /I /K
经过这样编译的Qt库不依赖于任何Dll文件(如微软的CRT运行时库),使用此Qt库编译Windows平台下的程序发布时不需要附带任何额外的Dll文件。
MinGW静态编译
1.设置MinGW的环境变量
2.设置目标平台
set QMAKESPEC=win32-g++
3.修改mkspecs/win32-g++目录下的配置文件qmake.conf
将下面一行:
1 | QMAKE\_LFLAGS = -enable-stdcall-fixup -Wl,-enable-auto-import |
修改为:
1 | QMAKE\_LFLAGS = -static -enable-stdcall-fixup -Wl,-enable-auto-import |
然后将下面一行:
1 | QMAKE\_LFLAGS\_DLL = -shared |
修改为:
1 | QMAKE\_LFLAGS\_DLL = -static |
4.QTDIR目录,运行配置,生成Makefile文件
1 | set QMAKESPEC=win32-g++ |
5.运行运行mingw32-make -i -k(-i -k选项的含义与上面nmake的相同)
经过这样编译的Qt库,不依赖任何Dll文件(如mingwm10.dll,libgcc_s_dw2-1.dll),使用此Qt库编译的Windows平台下的程序发布时不需要附带任何额外的Dll文件。
编译事项说明
编译完成后可以删除bin目录中所有不是当前编译日期的文件。
建议编译前移除examples和demos文件夹的所有文件,避免重编译这两个文件夹,加快编译速度。
另外,编译命令请根据自己的实际情况配置,上面我的配置是(以VS2005静态编译为例):
1 | -platform win32-msvc2005 目标平台 |
快速配置,只生成Qt库文件及子目录的Makefile文件,其它的Makefile文件后面再使用qmake生成
1 | -qt-sql-sqlite SQLite驱动支持 |
注意:使用静态编译的程序通常较大,建议发布前使用UPX压缩,一般可以减少至少50%的大小。
Comments