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
相关产品推荐
相关产品推荐

