第一次编译已经成功-webkit可用,SSL可用-开荒之旅,历尽艰辛.第二次编译已经成功-webkit可用,SSL可用-旧事重提,高歌猛进.建议参考第二次编译说明.本机使用Qt官方的安装器,已经安装了msvc2010,msvc2013,msvc2013_64和Qt5.5.1源码.本文在WIN7 x64下用MSVC2010x64动态编译Qt5.5.1源码.没有编译dbus,sql驱动只编译了sqllite.因为dbus是linux下的,驱动是第三方库,没有安装,就无法编译.源码根目录README有很多有用信息,Qt官方网页也有很多有用信息.●前置工具:1.ActivePerl5.8 or later2.Python2.7 or later3.Ruby没找到要求,我用的2.2.44.DirectX SDK不然编译失败,提示和ANGLE有关,大意是要DX SDK才能把把opengl映射到A NGLE,就算使用-opengl desktop也编译失败,不清楚为什么.DirectX SDK会自己设置一个环境变量DXSDK_DIR.Qt源码自带angle源码,不用去下载,也不用单独编译.5.C++ compiler supporting the C++98 standard前四个工具安装后,会自动配置环境变量,也必须有,否则就得在cmd中再配置.ActivePerl在p ath中必须位于msysgit的perl之前(如果有)关于Windows SDK 7.1和Visual Studio 2010和Visual Studio 2010 SP1,官方是这么说的: if you use this SDK with Visual Studio 2010, installing the SDK requires installing the foll owing packages in this order.注意有if,如果没安装SDK 7.1,不用鸟这部分内容.●第三方库:1.ICU-采用动态编译,X64 Debug和Release都编译了,并且分开存贮.2.SSL-采用动态编译,X64 Debug和Release都编译了,并且分开存贮.第三方库的编译,一定要按要求走到最后一步,编译出来最终是什么目录结构(即安装后),就是什么目录结构,别改.第三方库的编译,使用Debug版本和Release版本都可以,关键是lib和dll要对应.比如xd.lib 要和xd.dll相对应;x.lib要和x.dll.当然有的库编译出来的D/R名字一样,对于debug版本,它没有在名字后面加后缀d.第三方库的编译,没有必要编译两个配置,一个Release配置就够了,Qt官方就是这么干的,并且官方用的动态编译.●注意事项:[注意]在第一次编译中,编译了ICU和SSL的X64的D和R两个版本(动态编译,所有测试用例全部通过),但R版本的路径在前,目测QT编译过程中,直接用的R.所以第二次编译中,只提供了R版本.[注意]如果编译过程中出错,关掉CMD重来,在第一步之后执行,nmake distclean和nmake cl ean.[注意]此次编译设置的环境变量不会影响系统的环境变量,所设置的环境变量仅对当前cmd 有效.编译步骤:1.打开Visual Studio x64 Win64 命令提示(2010).因为要编译64位的Qt,所以用64位命令行.切到源码根目录,设置环境变量,仅针对当前命令行有效.注意release在前.cd /d D:\Qt\5.5.1\5.5\Srcecho %QtSrc%echo %PATH%echo %INCLUDE%echo %LIB%echo %QMAKESPEC%echo %DXSDK_DIR%第一次编译使用的环境变量SET QtSrc=D:\Qt\5.5.1\5.5\SrcSET PATH=D:\Microsoft DirectX SDK (June 2010)\Developer Runtime\x64;%QtSrc%\qtbase\bi n;%QtSrc%\gnuwin32\bin;D:\icu55.1X64\Release\bin64;D:\icu55.1X64\Debug\bin64;D:\ssl1.0.2f X64\Release\bin;D:\ssl1.0.2fX64\Debug\bin;%PATH%SET INCLUDE=D:\Microsoft DirectX SDK (June 2010)\Include;D:\icu55.1X64\include;D:\ssl1.0. 2fX64\include;%INCLUDE%SET LIB=D:\Microsoft DirectX SDK (June 2010)\Lib;D:\icu55.1X64\Release\lib64;D:\icu55.1X64 \Debug\lib64;D:\ssl1.0.2fX64\Release\lib;D:\ssl1.0.2fX64\Debug\lib;%LIB%SET QMAKESPEC=win32-msvc2010第二次编译使用的环境变量SET QtSrc=D:\Qt\5.5.1\5.5\SrcSET PATH=%QtSrc%\qtbase\bin;%QtSrc%\gnuwin32\bin;D:\icu55.1X64\Release\bin64;D:\ssl1.0.2 fX64\Release\bin;%PATH%SET INCLUDE=D:\icu55.1X64\include;D:\ssl1.0.2fX64\include;%INCLUDE%SET LIB=D:\icu55.1X64\Release\lib64;D:\ssl1.0.2fX64\Release\lib;%LIB%SET QMAKESPEC=win32-msvc2010SET DXSDK_DIR=%DXSDK_DIR%echo %QtSrc%echo %PATH%echo %INCLUDE%echo %LIB%echo %QMAKESPEC%echo %DXSDK_DIR%2.配置,生成makefile文件.键入configure –help可查看帮助.qtbase文件夹下的configure.cache和config.summary,可以看到配置命令和配置总结.第一次编译使用的配置configure -prefix D:\Qt\5.5.1\5.5\msvc2010_64 -debug-and-release -opengl dynamic -icu -no -warnings-are-errors -mp -nomake examples -nomake tests -opensource -platform win32-m svc2010 OPENSSL_LIBS="-lssleay32 -llibeay32"第二次编译使用的配置configure -prefix D:\Qt\5.5.1\5.5\msvc2010_64 -developer-build -debug-and-release -opengl dynamic -icu -no-warnings-are-errors -mp -nomake examples -nomake tests -opensource -p latform win32-msvc2010-confirm-license上述配置命令执行后,会跑一阵子,最后显示:Qt is now configured for building. Just run nmake.To reconfigure, run nmake confclean and configure.[注意]nmake confclean已失效.重新config即可覆盖之前的配置.3.编译,键入nmake.nmake[注意]If you later need to reconfigure and rebuild Qt from the same location, ensure th at all traces of the previous configuration are removed by entering the build directory a nd typing nmake distclean before running configure again.4.安装,键入nmake install.确保config时有-prefix.务必确保-prefix文件夹为空.nmake install[注意]安装后执行清理,要依赖-prefix,所以-prefix不能改名.安装后就清理是个不错的选择.清理非常耗时,成功清理后.nmake distclean和nmakeclean不再有效.如果还需要文档,得在文档编译,安装后再清理.5.安装后,%prefix%/bin目录下需要添加的文件.①icudt55.dll,icuin55.dll,icuuc55.dll是从生成的ICU中复制过去的,复制的是X64Release版本.不清楚为什么只复制这三个,是参照的MSVC2010,2013,2013_64.神奇的是MSVC2010,2013,2013_64都有ICU的dll,却在lib里面没有ICU的lib.也许Qt编译时,把icu的lib包括到自己的lib里面去了,毕竟lib是链接阶段用,dll是运行时用.所以可以把lib包含进去.②ssl仅有的两个dll不需要复制过来,config阶段,cmd显示sll是支持状态.没有在MSVC2010,2013,2013_64中找到SLL相关dll.原因是系统自带了SSL的两个DLL,位于system32中,但版本较老,我编译的SSL依赖的DLL得是自己编译出来的新版.但不能把新的DLL拿去替换system32中的dll,因为系统依赖的是旧版.把新的dll放进qt的bin 目录也没用,因为dll搜索时,system32优先级更高.唯一的办法就是把dll放到exe的目录,此目录搜索优先级比system32还高.SSL的lib并不需要复制到Qt的lib目录.③D3DCompiler_43.dll是从系统system32下复制的,64位dll.msvc2010是32位的D3DCompiler_43.dll,msvc2012是32位的d3dcompiler_47.dll,msvc20 12_64是64位的d3dcompiler_47.dll.④qt.conf是直接从msvc2010复制过去的,并且右键打开,修改了一下值.其中prefix的值一般为绝对路径,就是上文的%prefix%,为".."(即bin的父目录)也ok.其它属性的值是相对于prefix的路径.只需要指定不同于默认值的属性的值.⑤qtenv2.bat是直接从msvc2010复制过去的,并且右键打开,修改了一下参数.⑥licheck.exe是直接从msvc2010复制过去的.与证书检查相关,该文件在msvc2010,2013,2013_64中完全一样.⑦fixqt4headers.pl是直接从msvc2010复制过去的.该文件在msvc2010,2013,2013_64中完全一样.⑧opengl32sw.dll是直接从msvc2013_64复制过去的(64位dll).因为我发现msvc2010和msvc2013下,dll完全一样(32位dll),所以我假设msvc2010_64和msvc2013_64也是一样的(64位dll).另外我用depends查看了msvc2013和msvc2013_64下的这个dll,发现它们依赖的dll全是系统提供的.Qt for Windows - Requirements部分对opengl32sw.dll(系统没有)和opengl32.dll(系统有)有更详细的讨论,太长不爱看.6.编译文档nmake docs7.安装文档,安装在%prefix%\docs下. nmake install_docs。