You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Yocto中bb/inc文件使用时机及相关技术问题咨询

Yocto 新手常见问题解答

问题1:为软件包A添加依赖B,应该用require B.inc还是inherit B?

这得看B的具体性质:

  • 如果B是独立的软件包(需要单独编译、打包为rpm/deb/ipk等格式),你需要创建B.bb配方文件,然后在A.bb中通过DEPENDS += "B"声明编译依赖(运行时依赖则用RDEPENDS_${PN} += "B")。注意inherit是用来继承.bbclass类文件的,不能用来引入其他软件包配方。
  • 如果B只是共享的配置片段(比如通用编译参数、SRC_URI片段、自定义函数等,不需要单独打包),可以创建B.inc,然后在A.bb中用require B.inc引入,B中的配置会直接合并到A的配方逻辑里。

问题2:bbappend能否用于.inc文件?

Yocto的.bbappend机制不直接支持针对.inc文件的追加/修改,因为bbappend仅匹配.bb配方文件或.bbclass类文件。
要修改.inc中的内容,常见两种方式:

  • 如果该.inc仅被某个特定.bb配方引入,直接在对应配方的.bbappend里覆盖变量、重写函数即可——毕竟.inc的内容已经被合并到配方中。
  • 如果该.inc是多个配方共享的通用片段,你可以直接修改.inc文件本身(若为自己维护的层),或者创建自定义.bbclass替代原有.inc的功能,再让配方继承这个类。

问题3:inc文件中补丁的路径规则

默认情况下,SRC_URI里的file://路径是基于引入.inc的.bb配方的FILESPATH变量查找的,FILESPATH默认包含配方所在目录下的files子目录,以及按版本、包名划分的子目录。
针对B.inc中file://bar.patch的情况:

  • 不修改FILESPATH的话,bar.patch需要放在引入B.inc的A.bb所在目录的files子目录下才能被识别。
  • 要是想让B.inc独立管理补丁(实现通用化),可以在B.inc中添加:
    FILESPATH += "${THISDIR}/files"
    
    此时把bar.patch放在B.inc所在目录的files子目录里,就能被正确找到。

内容的提问来源于stack exchange,提问作者bourne

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 17:03:38