Private Headers 问题针对 Qt 5.10.1 编译 QtWebKit 5.212

Posted

技术标签:

【中文标题】Private Headers 问题针对 Qt 5.10.1 编译 QtWebKit 5.212【英文标题】:Private Headers issue compiling QtWebKit 5.212 against Qt 5.10.1 【发布时间】:2018-09-21 18:03:19 【问题描述】:

在 Windows 10、Visual Studio 2015 上,我正在针对 Qt 5.10.1 构建 QtWebKit (5.212),但在构建的配置部分遇到了错误。

这是我使用的命令行:

perl Tools\Scripts\build-webkit --qt --release --only-webkit --no-ninja --cmakeargs="-Thost=x64 -DCMAKE_GENERATOR_PLATFORM=x64" -G \"Visual Studio 14 2015 Win64\" --prefix=E:\Qt-5.10.1\QtWebKitBin -v

这是错误:

-- Performing Test Qt5Gui_PRIVATE_HEADER_FOUND
-- Performing Test Qt5Gui_PRIVATE_HEADER_FOUND - Failed
CMake Error at Source/cmake/OptionsQt.cmake:75 (message):
  Header private/qhexstring_p.h is not found.  Please make sure that:

      1. Private headers of Qt5Gui are installed
      2. Qt5Gui_PRIVATE_INCLUDE_DIRS is correctly defined in Qt5GuiConfig.cmake
Call Stack (most recent call first):
  Source/cmake/OptionsQt.cmake:612 (CHECK_QT5_PRIVATE_INCLUDE_DIRS)
  Source/cmake/WebKitCommon.cmake:50 (include)
  CMakeLists.txt:139 (include)


-- Configuring incomplete, errors occurred!

它用来进行测试的私有头文件确实存在于 Qt5 包含目录中,正如人们所期望的那样,在这个位置:

E:\Qt-5.10.1\QtBin\include\QtGui\5.10.1\QtGui\private\qhexstring_p.h

Qt5GuiConfig.cmake 文件只存在于Qt 安装的E:\Qt-5.10.1\QtBin\lib\cmake\Qt5Gui 目录中(不在QtWebKit 源码安装中)。我不知道它是否以任何方式利用它。

我需要做什么才能使构建根据需要找到此目录?将 'include\QtGui\5.10.1\QtGui\' 添加到 INCLUDE env var 不起作用,但我不认为这是正确的解决方案。

以下是我的环境中与 Qt 目录相关的部分:

INCLUDE = ...;E:\Qt-5.10.1\QtBin\include;E:\Qt-5.10.1\qt-everywhere-src-5.10.1\include
LIB = ...;E:\Qt-5.10.1\QtBin\lib;E:\Qt-5.10.1\qt-everywhere-src-5.10.1\lib
PATH = E:\Qt-5.10.1\qt-everywhere-src-5.10.1\qtbase\bin;E:\Qt-5.10.1\qt-everywhere-src-5.10.1\gnuwin32\bin;E:\Qt-5.10.1\QtBin\bin;...

QtBin 是我编译的 Qt 5.10.1 所在的目录。

qt-everywhere-src-5.10.1是Qt 5.10.1源码包

提前感谢您的帮助。我在 Google 或 *** 中找不到任何答案。

【问题讨论】:

这是QT安装下Qt5GuiConfig.cmake文件的正确位置:该文件描述的是QT,而不是QTWebKit。您可以尝试在该文件中查找变量Qt5Gui_PRIVATE_INCLUDE_DIRS @Tsyvarev,谢谢。在将我的 Qt 构建与我可以访问的另一个构建进行比较后,我在该文件中的 Qt5Gui_PRIVATE_INCLUDE_DIRS 中添加了设置,但它对 QtWebKit 构建没有影响。从 QtWebKit 构建中引用该文件的内容是什么?它如何搜索该文件?它是如何利用它的?为什么我的构建不会自动设置此设置? 【参考方案1】:

根据the wiki,您应该尝试定义 CMAKE_PREFIX_PATH 以指向您的 Qt 安装

例如:

perl Tools\Scripts\build-webkit --qt --release --only-webkit --no-ninja --cmakeargs="-Thost=x64 -DCMAKE_GENERATOR_PLATFORM=x64 -DCMAKE_PREFIX_PATH=c:\Qt\Qt5.6.0\5.6\msvc2015" -G \"Visual Studio 14 2015 Win64\" --prefix=E:\Qt-5.10.1\QtWebKitBin -v

【讨论】:

【参考方案2】:

使用 build-webkit 在 Windows 上构建失败,因为它无法找到此头文件 qhexstring_p.h 的位置。如何修复此错误,虽然不是标准方法,但它有效。

    在您的前缀目录中找到文件 qhexstring_p.h,或者您的 首选 Qt 安装 SDK 转到此文件 Source\cmake\OptionsQt.cmake 并更改此文件

从此CHECK_QT5_PRIVATE_INCLUDE_DIRS(Gui private/qhexstring_p.h)

到下面这个

CHECK_QT5_PRIVATE_INCLUDE_DIRS(GUI C:/SDK/qt5-5.7.0-vs2015/qt5-x86-static-release/include/QtGui/5.7.0/QtGui/private/qhexstring_p.h)

此处的路径必须与您的 Qt 安装路径以及丢失文件所在的确切位置匹配。这确保了为 Qt 安装寻找私有导向器的测试成功。

然后在您的 Qt 安装目录中找到文件 Qt5GuiConfig.cmake 并将变量 Qt5Gui_PRIVATE_INCLUDE_DIRS 设置为您在下面找到私有头文件的位置。

set(Qt5Gui_PRIVATE_INCLUDE_DIRS "$_qt5Gui_install_prefix/include/QtGui/$Qt5Gui_VERSION_STRING/QtGui" "$_qt5Gui_install_prefix/include/QtCore/$Qt5Gui_VERSION_STRING/QtCore")

注意这个版本的 QtWebKit (5.212) 已知有几个 错误,所以最好选择那些稳定的。

保存并运行

perl Tools\Scripts\build-webkit --qt --release --only-webkit --no-ninja --cmakeargs="-Thost=x64 -DCMAKE_GENERATOR_PLATFORM=x64 -DCMAKE_PREFIX_PATH=c:\Qt\Qt5.6.0\5.6\msvc2015" -G \"Visual Studio 14 2015 Win64\" --prefix=E:\Qt-5.10.1\QtWebKitBin -v

如你所愿,应该可以按预期运行。

【讨论】:

以上是关于Private Headers 问题针对 Qt 5.10.1 编译 QtWebKit 5.212的主要内容,如果未能解决你的问题,请参考以下文章

找不到模块映射文件'/Users/"my_flutter_project_path"/ios/Pods/Headers/Private/openssl_grpc/BoringSSL

qt编译oracle驱动,qt 5.12 连接 oracle 数据库示例代码

Qt 缺少 qtextcontrol_p.h

qt 5 发布技巧

5.关于QT中的网络编程,QTcpSocket,QUdpSocket

CMake中target_precompile_headers的使用