1.我用的vs2013编译器。
2.采用的是Qt 5.6.3。
3.系统windows 10。
因为我并不是全部编译Qt项目,只是把QtWebEngine源码拿出来编译。
在编译大型项目之前其实难点就是在环境的配置上,大多数的编译问题都是环境的问题。这点我深有体会,我在编译chromium的时候就遇到了,其中花了将近一周的时间去排查问题。
接下来需要你严格按照的我步骤去配置环境:
1.需要python2.7,注意不支持python3.你去官网去下载一个2.7版本。然后把它放到你的环境变量的最前面(是为了覆盖可能存在的python3版本)。
2.下载 Perl (Strawberry vesion) from http://strawberryperl.com/
3.下载 Bison and flex from https://sourceforge.net/projects/winflexbison/ (将 win-bison.exe 重命名为 bison.exe and win-flex.exe to flex.exe)
4.下载 Gperf from http://gnuwin32.sourceforge.net/packages/gperf.htm
5.将bison.exe和flex.exe 还有解压好的Gperf放到一个文件夹中,并一定要加入环境变量中。
6.最后环境弄好之后需要重启机器或者重启所有的explorer.exe进程
这些工具基本上都是需要才能下载,但是我为了方便都会放到网盘上提供给大家下载。
网盘地址:https://pan.baidu.com/s/1eipoPOiV83YHyTQ8V53LpQ 提取码:cpps
1.右键vs2013 开发者工具,使用管理员权限打开
2.cd C:\Qt\Qt5.6.3\5.6.3\Src\qtWebengine 目录
3."C:\Qt\Qt5.6.3\5.6.3\msvc2013\bin\qmake.exe" WEBENGINE_CONFIG+=use_proprietary_codecs
注意我的Qt目录,需要替换成你自己的安装目录
4.文件的编码修改,因为使用vs工具编译,它需要文件的文件格式为utf-8 BOM格式
如果你不修改的话,编译过程就爆出这样的错误 error C2220: 警告被视为错误 - 没有生成“object”文件
但是为了方便编译,我找到了网友做好的python脚本去处理这件事。再次非常感谢那位提供帮助的网友
将下面的文字保存并命名为"unicode_escape.txt"
c:\qt\qt5.6.3\5.6.3\src\qtwebengine\src\3rdparty\chromium\url\scheme_host_port.h
c:\qt\qt5.6.3\5.6.3\src\qtwebengine\src\3rdparty\chromium\third_party\boringssl\src\include\openssl\ssl.h
c:\qt\qt5.6.3\5.6.3\src\qtwebengine\src\3rdparty\chromium\v8\src\parsing\parser.cc
c:\qt\qt5.6.3\5.6.3\src\qtwebengine\src\3rdparty\chromium\third_party\boringssl\src\crypto\curve25519\curve25519.c
c:\qt\qt5.6.3\5.6.3\src\qtwebengine\src\3rdparty\chromium\third_party\boringssl\src\include\openssl\curve25519.h
C:\Qt\Qt5.6.3\5.6.3\Src\qtwebengine\src\3rdparty\chromium\third_party\snappy\src\snappy-stubs-internal.h
C:\Qt\Qt5.6.3\5.6.3\Src\qtwebengine\src\3rdparty\chromium\third_party\re2\src\re2\unicode_casefold.h
C:\Qt\Qt5.6.3\5.6.3\Src\qtwebengine\src\3rdparty\chromium\third_party\qcms\src\qcms.h
C:\Qt\Qt5.6.3\5.6.3\Src\qtwebengine\src\3rdparty\chromium\third_party\openmax_dl\dl\api\omxtypes.h
C:\Qt\Qt5.6.3\5.6.3\Src\qtwebengine\src\3rdparty\chromium\third_party\harfbuzz-ng\src\hb-private.hh
C:\Qt\Qt5.6.3\5.6.3\Src\qtwebengine\src\3rdparty\chromium\third_party\harfbuzz-ng\src\hb-ot-head-table.hh
C:\Qt\Qt5.6.3\5.6.3\Src\qtwebengine\src\3rdparty\chromium\third_party\harfbuzz-ng\src\hb-ot-layout-common-private.hh
C:\Qt\Qt5.6.3\5.6.3\Src\qtwebengine\src\3rdparty\chromium\third_party\harfbuzz-ng\src\hb-ot-shape-complex-indic.cc
C:\Qt\Qt5.6.3\5.6.3\Src\qtwebengine\src\3rdparty\chromium\third_party\harfbuzz-ng\src\hb-ot-shape-complex-thai.cc
C:\Qt\Qt5.6.3\5.6.3\Src\qtwebengine\src\3rdparty\chromium\third_party\boringssl\src\include\openssl\aead.h
C:\Qt\Qt5.6.3\5.6.3\Src\qtwebengine\src\3rdparty\chromium\third_party\boringssl\src\include\openssl\engine.h
C:\Qt\Qt5.6.3\5.6.3\Src\qtwebengine\src\3rdparty\chromium\third_party\boringssl\src\crypto\cmac\cmac.c
C:\Qt\Qt5.6.3\5.6.3\Src\qtwebengine\src\3rdparty\chromium\third_party\boringssl\src\crypto\rsa\internal.h
C:\Qt\Qt5.6.3\5.6.3\Src\qtwebengine\src\3rdparty\chromium\third_party\skia\src\effects\skdisplacementmapeffect.cpp
C:\Qt\Qt5.6.3\5.6.3\Src\qtwebengine\src\3rdparty\chromium\crypto\p224.h
C:\Qt\Qt5.6.3\5.6.3\Src\qtwebengine\src\3rdparty\chromium\crypto\p224.cc
C:\Qt\Qt5.6.3\5.6.3\Src\qtwebengine\src\3rdparty\chromium\third_party\libxslt\libxslt\xslt.c
C:\Qt\Qt5.6.3\5.6.3\Src\qtwebengine\src\3rdparty\chromium\net\quic\crypto\crypto_handshake_message.h
C:\Qt\Qt5.6.3\5.6.3\Src\qtwebengine\src\3rdparty\chromium\media\formats\mp2t\ts_section_pmt.h
下面的python脚本就是修改文件的编码格式
import sys
import os
import codecs
import chardet
def utf8_converter(file_path , universal_endline =True ):
# Read from file
print("file:"+ file_path)
file_open = open(file_path, "rb")
raw = file_open.read()
encoding_name = chardet.detect(raw)[ 'encoding']
print(encoding_name )
file_open.close()
# Decode
raw = raw.decode(encoding_name)
# Remove windows end line
if universal_endline:
raw = raw.replace( '\r\n', '\n')
# Encode to UTF-8-sig
raw = raw.encode('utf-8-sig')
file_open = open(file_path, 'wb')
file_open.write(raw)
file_open.close()
return 0
if __name__ == '__main__' :
'''file = sys.argv[1].encode( 'unicode_escape')'''
f = open("unicode_escape.txt", "r")
s = f.read()
files = s.split("\n")
for file in files:
utf8_converter(file, False)
f.close()
4."C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin\nmake.exe" all
使用VS nmake 编译,all表示编译所有的项目,并且生成了examples
5."C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin\nmake.exe" install
漫长的等待,我的笔记本编译大概了5,6个小时,剩下的就是文件的复制
6.测试程序
到这里就是编译结束了。
如果你编译了全部的时候,就可以在C:\Qt\Qt5.6.3\5.6.3\Src\qtwebengine\examples\webengine\quicknanobrowser下找到demo程序。
将quicknanobrowser.exe 拷贝到C:\Qt\Qt5.6.3\5.6.3\msvc2013\bin目录下,否则会提示你找不到Qt的相关dll文件。