windows下编译WebKit是个繁琐的事情,尤其是使用VCExprss来编译,编了很多次才最后得以成功。总结下来需要注意的地方如下:

1.在干净的,没有安装其他开发环境的机器上编译,如果有,请清理path目录,否则编译的时候可能用到了错误的程序。当然可以用which.exe看看到底用了那个程序

2.最好在英文的环境下编译,虽然说现在都unicode了,不过webkit编译生成的很多文件还是原始的单字节文件。比如在中文下编译dumprendertree就遇到了E:/webkit/WebKitLibraries/win/include/conditionalmacros.h文件有代码(936)不认识的字符,如果在中文下,也可以用notepad保存成unicode再编译一次

3.安装开发环境,需要严格安装webkit上面说的,其中cygwin,要用webkit上的cygwin-downloader来安装。同时一定安装quicktime sdk。这个东西也不大。

4.webkit原代码可以直接下载snapshot的,然后解压到随便哪个目录,注意解压完成一定要运行update-webkit脚本,如果在cygwin shell里面运行不了可以试试

perl –w update-webkit

5.在局域网里,需要设置proxy出去的机器,在cygwin的用户根目录(一般是c:/cygwin/home/<登陆用户>/)设置subversion和curl的代理,subversion的代理在.subversion/servers 文件里面,curl的代理在.curlrc文件里面,没有这个文件,可以新建后,添加配置

proxy = http://proxy:port

6.webkitsupportlibrary.zip需要从webkit上下载放在webkit源代码的根目录。不用解开,编译的时候会自动检查

7.好了,开始编译了,进入cygwin shell,cd到webkit源代码的地方。如果在其他盘符,也许需要这样

cd /cygdrive/<盘符>/webkit/webkittools/scripts/

8.运行perl –w build-webkit,呵呵杯具开始上演了。

9.如果出现错误,没关系,先查看webkit源代码目录下webkitbuild/obj/buildfailed文件,看看那个项目错了,然后看obj目录下该项目的buildlog.html文件

10.我碰到的问题有很多,下面一一道来,不过每个人遇到的不一样,我的解决方法也不一样的适合其他人,记住我用的是visual studio express 2005版本,也许visual studio 2005更容易

cl.exe不能运行: 这个问题这样解决,在windows系统环境中把INCLUDE和LIB和PATH都配置好,可以按照visual studio 2005的command prompt和microsoft 2003 r2 SDK的set windows xp retail environment的配置设置

link.exe连接错误:在shell里面看看link文件用的是那个,如果是/usr/bin下的,就把c:/cygwin/bin下的link.exe改个名字。

cssvaluekeywords.gpref文件错误:看看cssvaluekeywords.h和.c文件,最后是不是多了]和}

dumprendertree文件中936代码不认识的字符:可以用notepad保持成unicode再编译,或者修改这个项目文件配置不把warning到error

winlauncher工程link错误,找不到printdlg,startdoc等符号:在该工程里面添加comdlg32.lib gdi32.lib即可

webapitest工程link错误,找不到createwindowsex等符号:在该工程里面添加user32.lib ole32.lib

webcore工程link 1106错误,写文件错误或磁盘不足:把该工程的属性->C++->优化->全程序优化,关闭即可

webkit工程link __imp_GetOpenFileNameW@4 错误:在WebKit/WebKit2/win/WebKit2Common.vsprops里面添加comdlg32.lib库。

11.好了,基本在cygwin下可以编译成功了。webkitbuild目录下一共3G的文件。呵呵所以一定要大硬盘。cygwin下编译,我一共用了1个小时的时间。记住一点,每次编译最好把上次的webkitbuild目录删除,这样编译的成功率会高很多

12.运行编译好的webkit,需要先安装一个Safari,然后在Cygwin shell中运行run-safari脚本。这个很简单。调试用debug-safari脚本。这些就参见webkit网站