近期由於另外一個項目需要用 vs2015 ,於是把 Qt 也升級到了 5.6.0 。由於項目需要兼容 Windows xp ,所以需要自己編譯 Qt 。這里大致整理一下編譯的過程。
- 安裝 ActivePerl / Python / Ruby 。
ActivePerl: http://www.activestate.com/activeperl/downloads 。我用的版本是 ActivePerl-5.22.1.2201-MSWin32-x64-299574 。
Python: https://www.python.org/downloads/ 。我用的版本是 python-3.5.1-amd64 。
Ruby: https://www.ruby-lang.org 。我用的版本是 rubyinstaller-2.2.4-x64 。如果不編譯第三方的一些東西,可以不用 Ruby 。其實我編譯的時候也沒有用到,只是順手裝上了。
為了方便,我把這幾個都直接安裝在了 C 盤根目錄下(C:\Perl64 , C:\Python35 ,C:\Ruby22-x64)。 - 安裝 VS2015 。這個在線安裝時間很長,慢慢等吧。
- 下載 Qt 源碼,並解壓到本地目錄。
可以從這里選擇合適的鏡像站點下載:http://download.qt.io/official_releases/qt/5.6/5.6.0/single/qt-everywhere-opensource-src-5.6.0.zip.mirrorlist 。下載完成之后,解壓縮到本地目錄。我這里解壓后的目錄是 E:\qt-everywhere-opensource-src-5.6.0 。 - 在 Qt 源碼目錄 E:\qt-everywhere-opensource-src-5.6.0 下新建 qt-build.bat 文件。這個 bat 文件的作用是配置 Qt 編譯條件。我的 bat 文件內容如下:
1 REM ********** Initialize env for msvc 2015 cl compiler ********** 2 SET PATH=C:\Windows;C:\Windows\system32 3 REM Set up \Microsoft Visual Studio 2015, where <arch> is amd64, x86, etc. 4 CALL "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" x86 5 6 REM ********** Update include & lib to support xp win sdk 7.1A ********** 7 SET PATH=C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Bin;%PATH% 8 SET INCLUDE=C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Include;%INCLUDE% 9 SET LIB=C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Lib;%LIB% 10 SET CL=/D_USING_V140_SDK71_;%CL% 11 12 REM ********** 3rd party build tools binaries: ruby, perl, python ********** 13 SET PATH=C:\Ruby22-x64\bin;C:\Perl64\bin;C:\Python35;%PATH% 14 15 REM ********** Set up qt source env ********** 16 SET _ROOT=E:\qt-everywhere-opensource-src-5.6.0 17 SET PATH=%_ROOT%\qtbase\bin;%_ROOT%\gnuwin32\bin;%PATH% 18 REM Uncomment the below line when using a git checkout of the source repository 19 REM SET PATH=%_ROOT%\qtrepotools\bin;%PATH% 20 SET QMAKESPEC=win32-msvc2015 21 SET _ROOT= 22 23 REM Generate makefile 24 configure.bat -confirm-license -opensource -platform win32-msvc2015 -debug-and-release -static -target xp -prefix D:\Qt\Qt5.6.0-static-win32-vs2015-xp -qt-sql-sqlite -qt-sql-odbc -plugin-sql-sqlite -plugin-sql-odbc -qt-zlib -qt-libpng -qt-libjpeg -opengl desktop -qt-freetype -no-qml-debug -no-angle -nomake tests -nomake examples -skip qtquickcontrols -skip qtquickcontrols2 -skip qtsensors -skip qtdoc
- 運行 cmd ,並進入 Qt 源碼目錄,運行 qt-build.bat。
E:
cd E:\qt-everywhere-opensource-src-5.6.0
qt-build.bat - 等 Qt 完成配置之后,運行 nmake 。然后就是漫長的等待——在我的機器上大概需要 2 小時。
nmake
- 等待編譯完成之后,運行 nmake install 。編譯之后的文件會被自動復制到由 -prefix 指令指定的目錄下。
下面對 qt-build.bat 文件做一個簡要的說明。
- 1-10 行是配置 VC 編譯器。其中 6-10 行是啟用 VC 對 Windows xp 系統的支持。由於 VS 2012 之后,默認就不再支持 xp 。但微軟也提供了一個編譯選項去開啟 xp 支持,也就是 _USING_V140_SDK71_ 指令。對應在 VS2013 下是 _USING_V120_SDK71_ 。在 VS 中的設置見下圖。

- 12-21 行就是設置編譯需要依賴的環境,請確保這些路徑和本地一致。
- 24 行是實際的配置命令。-confirm-license -opensource 指定了采用開源授權協議。 -platform win32-msvc2015 指定了要編譯的平台,Qt支持的平台可以在 qtbase\mkspecs 目錄下找到。 -debug-and-release 表示包含 Debug 和 Release 版本。由於我是靜態編譯並且支持 xp ,故包含了 -static 和 -target xp 指令。-prefix D:\Qt\Qt5.6.0-static-win32-vs2015-xp 指令指定了編譯完成之后的安裝路徑,也就是運行 nmake install 時編譯后的庫要復制到的路徑。其他的指令指定了要包含的模塊和要排除的模塊(-skip 可以排除你不需要的模塊)。
- 以前編譯 Qt5.5.1 版本的時候,我的指令里包含了 -skip qtwebkit 。但這次編譯 Qt5.6.0 版本時卻總在配置時報 “Attempting to skip non-existent module qtwebkit.” 。后來去掉 -skip qtwebkit 才配置成功。 看來 Qt5.6.0 里默認已經不包含 QtWebket 模塊了(我猜的,沒有查 ^_^)。
最后,附上 Qt5 官方關於 Windows 支持的資料的鏈接:http://doc.qt.io/qt-5/windows-support.html 。
