第一次编译已经成功-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.ActivePerl 5.8 or later 2.Python 2.7 or later
3.Ruby没找到要求,我用的2.2.4
4.DirectX SDK不然编译失败,提示和ANGLE有关,大意是要DX SDK才能把把opengl映射到ANGLE,就算使用-opengl desktop也编译失败,不清楚为什么.DirectX SDK会自己设置一个环境变量DXSDK_DIR.Qt源码自带angle源码,不用去下载,也不用单独编译. 5.C++ compiler supporting the C++98 standard
前四个工具安装后,会自动配置环境变量,也必须有,否则就得在cmd中再配置.ActivePerl在path中必须位于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 following 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 clean.
[注意]此次编译设置的环境变量不会影响系统的环境变量,所设置的环境变量仅对当前cmd有效.
? 编译步骤:
1.打开Visual Studio x64 Win64 命令提示(2010).
因为要编译64位的Qt,所以用64位命令行.
切到源码根目录,设置环境变量,仅针对当前命令行有效. 注意release在前.
cd /d D:\\Qt\\5.5.1\\5.5\\Src
echo %QtSrc% echo %PATH% echo %INCLUDE% echo %LIB%
echo %QMAKESPEC% echo %DXSDK_DIR%
第一次编译使用的环境变量 SET QtSrc=D:\\Qt\\5.5.1\\5.5\\Src
SET PATH=D:\\Microsoft DirectX SDK (June 2010)\\Developer Runtime\\x64;%QtSrc%\\qtbase\\bin;%QtSrc%\\gnuwin32\\bin;D:\\icu55.1X64\\Release\\bin64;D:\\icu55.1X64\\Debug\\bin64;D:\\ssl1.0.2fX64\\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\\Src
SETPATH=%QtSrc%\\qtbase\\bin;%QtSrc%\\gnuwin32\\bin;D:\\icu55.1X64\\Release\\bin64;D:\\ssl1.0.2fX64\\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-msvc2010 SETDXSDK_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-msvc2010 OPENSSL_LIBS=\-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 -platform 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 that all traces of the previous configuration are removed by entering the build directory and 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,msvc2012_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 docs
7.安装文档,安装在%prefix%\\docs下.
nmake install_docs
相关推荐: