QtWebKit Visual Studio 2008 编译和调试环境建立指南

主要参考官方的构建指南:http://trac.webkit.org/wiki/BuildingQtOnWindows,建立QtWebKit在VS2008下面的编译和调试环境,本文提供了对官方构建指南的一些补充和错误纠正。

工具的准备和编译环境配置

包括Qt(使用4.7-VS2008的版本),Perl,Python和一些GnuWin32工具集的安装,具体请参考官方构建指南。

可以修改Qt的qtvars.bat(在Qt安装目录的bin里面),把上述工具加入PATH路径,修改如下(具体目录根据自己的安装目录进行修改)

set PATH=C:\Perl\bin;C:\GnuWin32\bin;C:\Python27;D:\Qt\4.7.3\bin;%PATH%

然后运行Qt 4.7.3 Command Prompt进入编译环境。

代码修正

当前的Night Build(r88232 07 June 2011)有一个文件在VC下面编译会出错,出错的地方在WebCore/platform/DefaultLocalizationStrategy.cpp第342行, <selection>周围使用了非标准的双引号,去掉或者改成单引号后就可以编译通过。

编译脚本修改

按照官方构建指南里面运行build-webkit的方式不能满足我们的需要,并且指南里面生成VC工程的方法有问题,需要自己对编译脚本做一些修改,并且自己手动运行某些步骤。

运行build-webkit,其实会顺序执行下列步骤:

  1. 创建一个build目录(默认为WebKitBuild,可以通过设定WEBKITOUTPUTDIR环境变量进行修改,按设置,Qt的port会为debug和release版本分别生成debug和release子目录,这种情况会导致后面的VC工程生成出错,需要的修改见下文)
  2. 进入build目录,先生成一些脚本自动产生的代码
  3. 调用qmake,根据.pro文件生成相应的make脚本
  4. 调用nmake,根据make脚本生成库文件

在webkitdirs.pm脚本里面的函数usesPerConfigurationBuildDirectory定义那些port会分别生成debug和release子目录,我们需要修改让Qt的port不会生成子目录,修改如下:

sub usesPerConfigurationBuildDirectory
{
    # [Gtk][Efl] We don't have Release/Debug configurations in straight
    # autotool builds (non build-webkit). In this case and if
    # WEBKITOUTPUTDIR exist, use that as our configuration dir. This will
    # allows us to run run-webkit-tests without using build-webkit.
    #
    # Symbian builds do not have Release/Debug configurations either.
    return ($ENV{"WEBKITOUTPUTDIR"} && (isGtk() || isEfl()))
           || isSymbian() || isAppleWinWebKit() || isQt();
}

主要在后面加上isQt()。

编译和VC工程生成

在进入WebKit所在的目录下运行:

perl Tools\Scripts\build-webkit --qt --debug --no-svg

–debug是生成debug调试版本,如果需要生成release版本可以换成–release,–no-svg是禁用svg支持模块,可以加快编译的速度,更多编译的开关可以查看build-webkit脚本,或者使用参数–help查看帮助,然后根据自己的需要进行选择。

image

编译完成1,2,3步,正式开始库编译的时候,就可以终止掉编译过程(crtl+break),生成VC工程后再通过VC工程进行后续的编译。如果按照官方的构建指南加入–qmakearg=”-tp vc”直接运行:

perl Tools\Scripts\build-webkit --qt --debug --no-svg --qmakearg="-tp vc"

会出错,原因是因为build-webkit每次都会先清空之前生成的makefiles,可以先临时注释掉这一语句,注释掉build-webkit脚本的431行,然后再运行上面的命令:

image

生成VC工程后,即可终止编译。

打开构建目录下面的WebKit.sln,打开后会得到一个提示说webcore工程加载错误,原因是路径生成有误,直接修改WebKit.sln的第9行的WebCore工程路径即可,然后再加入工具项目DumpRenderTree,ImageDiff,QtTestBrowser,其中QtTestBrowser是一个很简单的浏览器,通过它去跟踪WebKit内部的处理流程和了解内部结构会非常有帮助。设置好项目的依赖关系(QtTestBrowser->QtWebKit->webcore->jscore),就可以开始编译QtTestBrowser了,漫长的编译过程后得到的最后的结果(如果内存足够,可以考虑使用RamDisk和启用更多并行编译设置来加快编译速度):

image 

更多

Chrome的编译:https://rogeryi.wordpress.com/2011/03/29/chrome-webkit-build-on-windows/

WebKit资源收集 https://rogeryi.wordpress.com/2011/03/28/webkit-resources/

Advertisements