一、前言
Qt公司把chromium集成包装为一个webengine开发库,提供很强劲的web访问能力,通常存在如下2种情况需要交叉版本编译webengine,系统中已经存在低版本qt(比如5.15.1),应用开发依赖需要高版本的webengine(比如6.2.2),或者为了适配新的CPU架构,需要设定指定的qt版本环境。
二、准备Qt环境
qt公司伟大之处就是实现了跨平台通过纯C++方式封装了一套平台无关系性的界面开发库,基本上不需要修改太多代码即可在全新的CPU架构上编译成功,
下载源码
$ wget https://download.qt.io/archive/qt/6.2/6.2.2/single/qt-everywhere-src-6.2.2.tar.xz
解压源码后设置编译安装指定目录qteverywhere, 并移除qtwebengine的目录
暂且设置安装目录/opt/qt6.2.2_everywhere
安装qtbase的依赖
$ sudo apt build-dep qtbase-opensource-src
$sudo apt-get install libpcre2-dev libdouble-conversion-dev libmysql-ocaml-dev libxkbcommon-x11-dev libsqlite3-dev libxcb-icccm4-dev libxcb-image0-dev libxcb-keysyms1-dev libxcb-render-util0-dev libxcb-xinerama0-dev libxinerama-dev libxcb-icccm4-dev libxcb-image0-dev libxcb-keysyms1-dev libxcb-render-util0-dev libxcb-xinerama0-dev libxinerama-dev libssl-dev libjpeg-dev firebird-dev libdbus-1-dev libxcb-randr0-dev libxcb-shape0-dev libxcb-sync-dev libxcb-xfixes0-dev libharfbuzz-dev libpng-dev unixodbc-dev libpq-dev freetds-dev flite1-dev libspeechd-dev libudev-dev libzstd-dev libx11-xcb-dev libglu1-mesa-dev "^libxcb.*" build-essential
配置qteverywhere
$./configure -opensource -confirm-license -prefix /opt/qt6.2.2_everywhere -release -opensource -openssl -no-rpath -optimized-qmake -dbus-linked -no-strip -no-separate-debug-info -qpa xcb -xcb -glib -icu -accessibility -no-directfb -opengl desktop -no-use-gold-linker -nomake examples -nomake tests
编译安装qt-everywhere
$ cmake --build . --parallel
$ cmake --install .
Qt will be installed into '/opt/qt6.2.2_everywhere'
三、编译webengine
下载源码
$ dget http://deb.debian.org/debian/pool/main/q/qt6-webengine/qt6-webengine_6.2.4+dfsg-7.dsc
编译安装 qtwebengine,安装依赖
$ apt install libxkbfile-dev
$ sudo apt build-dep qtwebengine-opensource-src
设置环境变量,使得qtwebengine编译使用qt5.15.3的环境
export QT_BUILDDIR=/opt/qt6.2.2_everywhere
export LD_LIBRARY_PATH=$QT_BUILDDIR/lib:$LD_LIBRARY_PATH
export QT_QPA_PLATFORM_PLUGIN_PATH=$QT_BUILDDIR/plugins/platforms
export QT_PLUGIN_PATH=$QT_BUILDDIR/plugin
export PKG_CONFIG_PATH=$QT_BUILDDIR/lib/pkgconfig:$PKG_CONFIG_PATH
export PATH=$QT_BUILDDIR/bin:$PATH
qt版本隔离需要借助如上环境变量来实现。
应用debian目录中的patch
$ dh_quilt_patch
创建构建目录
$ mkdir build
编译前的配置
$ cd build
$cmake -DCMAKE_INSTALL_PREFIX=/ -DCMAKE_BUILD_TYPE=None -DCMAKE_INSTALL_SYSCONFDIR=/etc -DCMAKE_INSTALL_LOCALSTATEDIR=/var -DCMAKE_EXPORT_NO_PACKAGE_REGISTRY=ON -DCMAKE_FIND_PACKAGE_NO_PACKAGE_REGISTRY=ON -DCMAKE_INSTALL_RUNSTATEDIR=/run -GNinja -DCMAKE_VERBOSE_MAKEFILE=ON -DCMAKE_INSTALL_LIBDIR=lib/x86_64-linux-gnu -DCMAKE_LIBRARY_PATH=x86_64-linux-gnu -DFEATURE_webengine_system_libevent=ON -DFEATURE_qtpdf_build=ON -DFEATURE_qtpdf_widgets_build=ON -DFEATURE_qtpdf_quick_build=ON -DFEATURE_webengine_proprietary_codecs=ON -DFEATURE_webengine_kerberos=ON ..
需要准备的js文件
$ touch src/3rdparty/chromium/third_party/devtools-frontend/src/front_end/third_party/lighthouse/lighthouse-dt-bundle.js
src/3rdparty/chromium/third_party/devtools-frontend/src/front_end/third_party/lighthouse/report-assets/report-generator.js
src/3rdparty/chromium/third_party/devtools-frontend/src/front_end/diff/diff_match_patch.js
src/3rdparty/chromium/third_party/jstemplate/jstemplate_compiled.js
开始编译并安装
$ ninja -C .
$ DESTDIR=/opt/qt6.2.2_everywhere ninja install
四、测试
编译simplebrower,qt提供的简易浏览器demo
拷贝一份代码,记得在终端中设置指定编译出来的QT环境变量
$ cp -r examples/webenginewidgets/simplebrowser ~/
$ cd ~/simplebrowesr
$ mkdir build & cd build
$ qmake6 ..
$ make -j8
运行简易浏览器
$ ./simplebrowser



