使用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加快编译速度,但是使用的过程中有些问题,所以脚本中移除了
使用Qt5.9.5和VS2017单独编译Qtwebkit_第1张图片
Qt安装勾选MSVC

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

你可能感兴趣的:(使用Qt5.9.5和VS2017单独编译Qtwebkit)