代码改变世界

Win10 + VS2015 下编译 Qt5.6.0

2016-05-05 11:01  几何  阅读(11971)  评论(4编辑  收藏  举报

 

近期由于另外一个项目需要用 vs2015 ,于是把 Qt 也升级到了 5.6.0 。由于项目需要兼容 Windows xp ,所以需要自己编译 Qt 。这里大致整理一下编译的过程。

  1. 安装 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)。

  2. 安装 VS2015 。这个在线安装时间很长,慢慢等吧。

  3. 下载 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 。

  4. 在 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

     

  5. 运行 cmd ,并进入 Qt 源码目录,运行 qt-build.bat。
    E:
    cd
    E:\qt-everywhere-opensource-src-5.6.0
    qt-build.bat

     

  6. 等 Qt 完成配置之后,运行 nmake 。然后就是漫长的等待——在我的机器上大概需要 2 小时。
    nmake

     

  7. 等待编译完成之后,运行 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 。