使用Qt5.9.5和VS2017单独编译Qtwebkit

经过几天的摸索终于确定了研究Qtwebkit的正确姿势,之前编译的版本都是基于Qt5.5.1(里面包含Qtwebkit),由于Qt5.5.1发布的时间已经比较久了,对VS最高版本的支持为VS2013,现在VS2017都已经发布了,而我本机安装是VS2017(为了编译Qt5.5.1安装了VS2015),通过这几天的折腾终于理清了思路(这里说句题外话,研究过程中任何折腾都是值得的),之前静态编译的研究其实对我不是必须的,我需要的是能够有一个可以修改最新webkit源码并持续研究的过程(最新的webkit对h5的支持也多一些),当然如果能够静态编译的话可以简化之后生产环境的部署。


下载最新的Qtwebkit

github上有人维护了一个最新的版本,而且持续在持续更新,具体地址如下:

https://github.com/annulen/webkit/

Qtwebkit在Qt5.5.1之后就没有维护了,之后又重启了Qtwebkit的维护,具体原因可以参考github上的wiki,这个是之前没有想到的(我之前一直纠结在研究原生的webkit还是Qtwebkit之间,先选择了原生webkit又改成Qtwebkit,各种原因,各种纠结)。

编译Qtwebkit注意事项

这个在github的wiki上已经有了,我这里再啰嗦下,再加一些在编译过程中遇到的问题,毕竟不是每个人都能看懂英文,原wiki如下:

https://github.com/annulen/webkit/wiki/Building-QtWebKit-on-Windows

需要注意的地方:

  • VS的版本需要使用2015或以上,这里使用的是2017
  • Python使用2.7版本
  • Qt的源码中有gnuwin32/bin,需要将这个加到PATH中,没有的话需要单独下载
  • 如果是要编译MSVC版本的Qtwebkit,那么MSYS2、Cygwin的bin不能出现在PATH中
  • 编译使用cmd.exe,不要使用PowerShell
  • 如果是中文的操作系统请改成英文的,中文能不能编译成功我不知道(我尝试了几次都失败了,编译太耗时不想再尝试了)
  • 源码的放置路径不易过长(wiki上提到56个字符),编译的路径最好不要有中文
  • 编译之前需要下载一些依赖,每次修改脚本都要重新下载一次,第一次下载完之后就可以禁用下载了,注释掉Tools\Scripts\build-webkit中的下面这行代码:
#(system("perl Tools/Scripts/update-qtwebkit-win-libs") == 0) or die
  • 编译时出现常量中有换行的错误,将文件另存为BOM形式的编码即可,主要是下面这个文件:
tools\testwebkitapi\tests\wtf\wtfstring.cpp
编译脚本
ECHO ON

SET _CD=%CD%
SET _PATH=%PATH%
SET PATH=G:\qt\qt-everywhere-opensource-src-5.9.5\gnuwin32\bin;C:\Strawberry\perl\bin\;^
    C:\Ruby25-x64\bin;C:\python27\;^C:\Strawberry\c\bin;C:\Strawberry\perl\site\bin;C:\Program Files\CMake\bin;^
    %PATH%

REM Set up \Microsoft Visual Studio 2015
REM CALL "C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\VC\Auxiliary\Build\vcvars64.bat"

SET BUILD_MODE=debug
SET ICU_PCM_DIR=%_CD%\icu-59.1-vs2017
SET QT_PREFIX=C:\Qt\5.9.5\msvc2015
SET QTWEBKIT_SOURCE=%_CD%\webkit\webkit-src
SET QTWEBKIT_PREFIX=%_CD%\webkit\build\%BUILD_MODE%

REM SET PATH=%PATH%;%_CD%\ninja-1.8.2
REM SET INCLUDE=%INCLUDE%;%ICU_PCM_DIR%\include;
REM SET LIB=%LIB%;%ICU_PCM_DIR%\lib;
REM SET SQLITE_INCLUDE_DIR=G:\qt\webkit\webkit-src\WebKitLibraries\win\include
REM SET SQLITE_LIBRARIES=G:\qt\webkit\webkit-src\WebKitLibraries\win\lib32

CD /D %_CD%\webkit
REM SET WEBKIT_OUTPUTDIR=%QTWEBKIT_PREFIX%
perl webkit-src\Tools\Scripts\build-webkit --qt --%BUILD_MODE% --prefix=%QTWEBKIT_PREFIX%^
    --cmakeargs="-T host=x64 -Wno-dev -DCMAKE_INSTALL_PREFIX=%QTWEBKIT_PREFIX% -DCMAKE_PREFIX_PATH=%QT_PREFIX% -DENABLE_WEBKIT2=OFF"

CD /D %_CD%\webkit\webkit-src\WebKitBuild\%BUILD_MODE%
cmake -DBUILD_TYPE=%BUILD_MODE% -P cmake_install.cmake

CD /D %_CD%
SET PATH=%_PATH%

请将上面的路径改成自己的安装路径,但是还有以下几点需要注意:

  • 先安装Qt,注意要安装Qt5.6.5或以上,我安装的是Qt5.9.5,安装的时候注意勾选上MSVC,具体请看下面的图
  • 直接打开VS2017开发人员命令提示符窗口运行脚本
  • 如果要编译64位的Qtwebkit则需要在cmakeargs中加上-G "Visual Studio 15 2017 Win64",注意其中的反斜杠
  • 如果要编译debug版本则需要在cmakeargs中加上-T host=x64,这个主要是告诉编译器使用64位的工具
  • DCMAKE_PREFIX_PATH是指向安装的Qt的MSVC版本,我安装的是32位的MSVC2015
  • 注意上面指定的MSVC版本一定要跟编译Qtwebkit版本匹配,比如安装的32位的Qt MSVC,那么编译的Qtwebkit也一定要是32位的
  • 上面的编译脚本禁用了webkit2,需要使用webkit2请去掉这个参数
  • --install参数在qtwebkit-5.212中还有bug,需要单独执行cmake_install.cmake
  • 在wiki上建议使用ninja加快编译速度,但是使用的过程中有些问题,所以脚本中移除了
Qt安装勾选MSVC

后记:原以为使用最新的版本Qt和Qtwebkit可以简化编译过程,但是过程并没有想象的那样简单,主要是编译比较耗时,修改脚本后又要删除CMakeCache,然后重新编译。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,029评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,238评论 3 388
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,576评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,214评论 1 287
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,324评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,392评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,416评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,196评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,631评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,919评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,090评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,767评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,410评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,090评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,328评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,952评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,979评论 2 351

推荐阅读更多精彩内容