Yocto构建Qt6嵌入式应用报错:缺失Qt6QuickTools依赖
Qt6嵌入式部署依赖缺失问题
错误信息
Qt6Quick could not be found because dependency Qt6QuickTools could not be found.
Could NOT find Qt6QuickTools (missing: Qt6QuickTools_DIR)
Yocto配方
SUMMARY = "Qt application recipe" DESCRIPTION = "This recipe builds the Application" LICENSE = "CLOSED" LIC_FILES_CHKSUM = "" DEPENDS += "qtbase qtdeclarative qtcharts qtimageformats qtscxml qtmultimedia qtquick3d" RDEPENDS:${PN} += "qtsvg \ qtdeclarative-qmlplugins \ ttf-dejavu-sans \ ttf-dejavu-serif \ " SRC_URI = "github url" SRCREV = "github commit hash" S = "${WORKDIR}/git" inherit qt6-cmake do_install() { install -d ${D}/opt/app/ install -m 0755 app ${D}/opt/app/ install -m 0755 ${S}/mod/setup.sh ${D}/opt/app/ cp -r ${S}/* ${D}/opt/app/ } FILES:${PN} += "/opt/app/* "
Qt项目CMake配置
cmake_minimum_required(VERSION 3.16) project(project VERSION 0.1 LANGUAGES CXX) set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) find_package(Qt6 REQUIRED COMPONENTS Quick) find_package(Qt6 REQUIRED COMPONENTS Core) find_package(Qt6 REQUIRED COMPONENTS QuickControls2) find_package(Qt6 REQUIRED COMPONENTS Qml) find_package(Qt6 REQUIRED COMPONENTS Charts) set(PROJECT_SOURCES main.cpp ... qml.qrc ) qt_add_executable(project MANUAL_FINALIZATION ${PROJECT_SOURCES} ) target_link_libraries(project PRIVATE Qt6::Core) target_link_libraries(project PRIVATE Qt6::Quick) target_link_libraries(project PRIVATE Qt6::QuickControls2) target_link_libraries(project PRIVATE Qt6::Charts) target_link_libraries(project PRIVATE Qt6::Qml) if(QT_VERSION_MAJOR EQUAL 6) qt_import_qml_plugins(project) qt_finalize_executable(project) endif()
问题背景
应用在Qt5下可正常构建运行,Windows开发环境的Qt6版本也能正常运行,但Yocto构建时出现Qt6QuickTools依赖缺失,网上找不到该组件相关信息。
解决方案
1. 检查Yocto Qt6元层配置
Qt6QuickTools并非Qt官方公开组件,该错误大概率是Yocto构建Qt6时的内部依赖解析问题,或是meta-qt6配方的组件命名差异:
- 确保使用的
meta-qt6层版本与应用依赖的Qt6版本匹配,不同版本的meta-qt6对组件打包逻辑有差异。 - 执行
bitbake -e qtdeclarative | grep PACKAGECONFIG,查看qtdeclarative的配置项是否启用了quick、qml等必要模块,缺失的话需要在local.conf中添加对应配置,例如:PACKAGECONFIG:append:pn-qtdeclarative = " quick qml"
2. 优化CMake组件查找逻辑
Windows环境下Qt6的依赖是隐式处理的,但Yocto嵌入式环境需要更明确的配置:
- 合并重复的
find_package调用,减少依赖解析冲突:find_package(Qt6 REQUIRED COMPONENTS Core Quick Qml QuickControls2 Charts) - 如果应用不需要自动导入所有QML插件,可暂时注释
qt_import_qml_plugins(project),避免触发额外的依赖查找。
3. 补充Yocto构建依赖
在配方的DEPENDS中添加qtdeclarative-dev,确保构建阶段能获取到QtQuick的开发文件:
DEPENDS += "qtbase qtdeclarative qtdeclarative-dev qtcharts qtimageformats qtscxml qtmultimedia qtquick3d"
4. 手动指定Qt6Quick路径(临时方案)
若上述方法无效,可在CMake中直接指定Qt6Quick的配置路径,绕过错误的依赖查找:
set(Qt6Quick_DIR "${OE_QMAKE_PATH_QT}/lib/cmake/Qt6Quick") find_package(Qt6 REQUIRED COMPONENTS Quick)
OE_QMAKE_PATH_QT是Yocto继承qt6-cmake后自动设置的Qt6安装路径变量。
内容的提问来源于stack exchange,提问作者Lenni M.
相关产品推荐
相关产品推荐

