Yocto构建PySide6时Git路径错误及bbappend失效问题求助
问题描述
在使用Yocto构建PySide6时遇到异常:克隆meta-qt6 6.8版本层后尝试安装PySide6,出现大量do_fetch错误,原因是Git路径多了额外的/pyside/或/qt/层级。例如错误路径为code.qt.io/pyside/pyside/pyside-setup.git,正确路径应为code.qt.io/pyside/pyside-setup.git。
为修正路径,在自定义层中编写了多个独立.bbappend文件修改SRC_URI:
- python3-shiboken6_%.bbappend
SRC_URI:remove = "git://code.qt.io/pyside/pyside/pyside-setup.git;name=pyside-setup;branch=6.8;nobranch=1;protocol=git" SRC_URI:append = " git://code.qt.io/pyside/pyside-setup.git;name=pyside-setup;branch=6.8;nobranch=1;protocol=https" SRCREV_FORMAT = "pyside_setup"
- qtquick3d_%.bbappend
SRC_URI:remove = "git://code.qt.io/qt/qt/qtquick3d.git;name=qtquick3d;branch=6.8;nobranch=1;protocol=git" SRC_URI:append = " git://code.qt.io/qt/qtquick3d.git;name=qtquick3d;branch=6.8;nobranch=1;protocol=git"
修改仅对部分依赖生效,python3-shiboken6-native和qtquick3d-native依赖未生效,还出现互斥构建现象:
- 移除
python3-shiboken6_git.bbappend时,python3-shiboken6构建成功,但qtquick3d-native失败; - 保留
qtquick3d_git.bbappend时,shiboken6包出现获取错误; - 同时保留或都移除时,两者均失败。
现请教:
- Git路径错误的原因是什么?
- 如何解决该问题?我的
.bbappend命名或写法有明显错误吗?
问题解答
1. Git路径错误的原因
这是meta-qt6 6.8版本层的配方编写失误——在定义SRC_URI时重复添加了项目所属的顶层路径前缀(比如pyside/或qt/),导致Git仓库路径出现冗余层级,无法正确定位到真实的仓库地址。
2. 问题解决与.bbappend的问题修正
你的.bbappend存在两个核心问题:
- 命名不匹配native配方:当前的
python3-shiboken6_%.bbappend和qtquick3d_%.bbappend只会匹配目标架构的配方,但*-native类配方需要对应的*-native_%.bbappend文件来覆盖配置。 SRC_URI:remove的匹配精度问题:原配方中可能存在多个Git源,或者SRC_URI的参数顺序/格式和你写的不完全一致,导致SRC_URI:remove没有精准匹配到错误的路径,进而出现互斥构建的冲突。
修正方案:
(1)针对native配方创建对应bbappend
分别创建:
- python3-shiboken6-native_%.bbappend
SRC_URI:remove = "git://code.qt.io/pyside/pyside/pyside-setup.git;name=pyside-setup;branch=6.8;nobranch=1;protocol=git" SRC_URI:append = " git://code.qt.io/pyside/pyside-setup.git;name=pyside-setup;branch=6.8;nobranch=1;protocol=https" SRCREV_FORMAT = "pyside_setup"
- qtquick3d-native_%.bbappend
SRC_URI:remove = "git://code.qt.io/qt/qt/qtquick3d.git;name=qtquick3d;branch=6.8;nobranch=1;protocol=git" SRC_URI:append = " git://code.qt.io/qt/qtquick3d.git;name=qtquick3d;branch=6.8;nobranch=1;protocol=git"
(2)优化SRC_URI的修改方式
如果SRC_URI:remove匹配不稳定,可以改用更精准的替换方式,直接覆盖SRC_URI中对应name的源:
以python3-shiboken6为例:
SRC_URI[pyside-setup] = "git://code.qt.io/pyside/pyside-setup.git;branch=6.8;nobranch=1;protocol=https"
这种方式直接针对name=pyside-setup的源修改地址,避免了remove和append的顺序冲突问题。
(3)统一处理所有相关配方
检查meta-qt6 6.8层中所有存在路径冗余的配方(比如其他qt组件、pyside相关包),为每个包(包括native版本)创建对应的bbappend,确保所有SRC_URI中的Git路径都被修正。
内容的提问来源于stack exchange,提问作者Camstillo

