Yocto中RDEPENDS:${PN}、FILES:${PN}与OVERRIDES的关联及冒号作用问询
VAR:${PN}变量写法的解析 在Yocto构建系统里,你提到的RDEPENDS:${PN}、FILES:${PN}这类变量写法,本质是当前配方专属的变量重载语法,和OVERRIDES里的pn-<配方名>完全对应,只是做了简化写法,具体可以拆解成这几点理解:
${PN}与OVERRIDES中pn-XXXX的对应关系:${PN}就是当前配方的包名(比如你例子里的XXXX),OVERRIDES里的pn-XXXX其实是pn-${PN}的展开结果。Yocto在处理变量时会自动把VAR:${PN}解析为VAR:pn-${PN},直接匹配OVERRIDES中的条目,所以你不用在OVERRIDES里找裸的${PN}值。这种写法的优势:
用${PN}代替硬编码的包名,配方的灵活性更高——不管配方被继承、重命名还是通过PN变量修改了包名,这个变量重载都会自动绑定到当前配方对应的包,不用手动修改变量名里的包名部分。比如写FILES:${PN} = "/usr/bin/myapp /etc/myapp.conf",不管最终PN是myapp还是myapp-custom,都会正确对应到当前包的文件列表。优先级与生效逻辑:
配方专属的VAR:${PN}重载,优先级高于系统、架构等通用OVERRIDE(比如VAR:linux、VAR:aarch64)。如果同一个变量有多个重载,Yocto会按照OVERRIDES的顺序和重载的特异性来选择生效的变量值,配方专属的重载会被优先选中。
举个实际例子:如果你的配方是demo.bb,PN的值是demo,那么RDEPENDS:${PN} = "libcurl"会被解析为RDEPENDS:pn-demo = "libcurl",而你用bitbake -e demo查看OVERRIDES时,里面的pn-demo就是这个重载对应的匹配项,最终这个依赖会被应用到demo包上。
内容的提问来源于stack exchange,提问作者Jaehyun Lee

