Qt 6 项目报 Qt6::QmlIntegration 未找到,如何排查?
结论
报错显示,CMake 计算 $<TARGET_PROPERTY:Qt6::QmlIntegration,_qt_module_has_private_headers> 时,找不到 Qt6::QmlIntegration 目标。先检查 find_package(Qt6 COMPONENTS ...) 是否加载了这个组件,以及 CMake 使用的 Qt 安装中是否包含它。单凭这段日志,无法判断是否必须升级到 Qt 6.10。find_package(Qt6 REQUIRED ...) 也不表示必须使用 Qt 6.10。
Qt 文档将 QmlIntegration 列为独立模块,并说明了如何通过 find_package 加载它。每个已加载的 Qt 模块都会提供相应的 Qt6::... 目标。Qt Qml 模块文档 Qt CMake 导入目标文档
先尝试加载 QmlIntegration
如果项目或当前 Qt 的 CMake 配置确实需要这个目标,请将它加入组件列表:
find_package(Qt6 REQUIRED COMPONENTS
Core
Widgets
SerialPort
PrintSupport
QmlIntegration
)
如果源码实际使用 Qt QML API,也应按需加载 Qml。Qml 和 QmlIntegration 是不同的组件,不能只看目标名称就互相替换。例如:
find_package(Qt6 REQUIRED COMPONENTS
Core
Widgets
SerialPort
PrintSupport
Qml
QmlIntegration
)
只有项目确实使用这些 API 时,才添加相应组件。不要只为消除报错就把 Qt6::QmlIntegration 换成 Qt6::Qml。目标应与 CMake 配置实际引用的模块一致。
核对 Qt 路径并清理缓存
添加组件后如果仍然找不到目标,检查 CMake 是否混用了不同 Qt 安装中的配置文件。用 Qt Creator 打开当前 Kit 的 CMake 配置,核对 Qt6_DIR、CMAKE_PREFIX_PATH 和构建目录缓存,确认它们指向同一套 Qt 安装和同一编译器架构。Windows 上还要避免混用 MSVC Kit 和 MinGW 版 Qt。
接着删除项目的构建目录,或在 Qt Creator 中清除 CMake 配置后重新运行配置。旧的 CMakeCache.txt 可能还记录着旧电脑或另一套 Qt 的路径。必要时,检查 CMake 输出中实际加载的 Qt6Config.cmake 路径,并确认对应安装中存在 Qt6QmlIntegration 模块的 CMake 配置文件。
是否需要指定 Qt 最低版本
需要时,可以在 find_package(Qt6 ...) 中增加最低版本要求,例如:
find_package(Qt6 6.7 REQUIRED COMPONENTS Core Widgets)
这表示项目要求的最低 Qt 版本,但不能代替组件声明,也无法修复错误的 Qt 安装路径。是否应设为 6.7,取决于项目实际使用的 API 和构建配置。现有信息不足以确认项目必须升级到 6.10。
如果项目不使用 QML,但添加组件后,错误仍出现在 Qt 自身的 Gui/CMakeLists.txt 中,请继续核对完整的 CMake 配置日志、该文件所在的 Qt 安装路径,以及项目是否加载了另一版本或不完整的 Qt 包。当前日志只能说明生成阶段无法使用该目标,不能单独确认具体的安装问题。
备注:内容仅供参考。
