我这里记录一下我用msvc2008编译qt的过程。
qt源码版本:qt5.4.0
编译日期:2015-08-23
编译环境:msvc2008sp1 x86
1. 请先参阅http://doc.qt.io/qt-5/windows-requirements.html,准备环境:Python、Perl、Ruby
2. 虽然qt5.4不再必须依赖于icu,但是如果你要编译qtwebkit,那么还是得编译icu,而icu5.3官方提供的源码包里只有vc2010的解决方案和项目,所以第一步是用vc2008编译icu5.3
a) 但是你有没有发现qt发行版中的icu53dt.dll有20M+!!!所以这第一小步就献给裁减icu 。google icu可以知道icu是个编码转换库,类似iconv和boost.locale。实际上在Windows上就是WideCharToMultiByte和MultiByteToWideChar两个API的工作,但是很不幸的是qtwebkit并没有使用这两个函数去代替icu库。查阅icu官网可知,icudt里边包含的只是编码字符集等资源,没有多少实际的代码,那么我们就可以想办法去掉我们不会用到的资源——这一点icu早就想到了,他提供了一个页面用于定制icu的资源:http://apps.icu-project.org/datacustom。但是,万事就怕但是,这个页面在我着手整理qt的编译的时候登不上去,我翻墙也上不去,顺便又看了下其他页面,发现下载页面(http://site.icu-project.org/download/53)上在说正事的地方也挂了,我去。还好我之前有下过源码,也定制过自己的资源,好怕怕。
b) 你经过一系列的挣扎拿到了icu5.3的源码和定制过的icudt53l.dat
c) 用vc2010编译了几次发现整个过程大致是先编译出来icudt53(d).dll,然后makedata那个工程用pkgdata把资源再打包进icudt53(d).dll,形成最后的icudt.dll(注意,不管是debug还是release最后生成的都是icudt53.dll),按照官方说的把icudt53l.dat放到source\data\in下面,发现到某一步的时候某个工程使用了某个工具把他解压开放在了source\data\out下面,恕我无能或无心,三个“某”字没搞清楚
d) icu真是的,大部分工程的名称跟他们生成的二进制都不一样,而且目标文件路径都是修改过的,这给我把vc2010的项目改成vc2008的带来了很大的工作量。而且你可以看到allinone.sln里的项目有20+个。然而并不是每个都是必须的,请再次恕我无心,我并没有完全搞清楚哪些项目是必须的,但是我知道makedata、pkgdata两个工具项目是必