考虑到yocto为开发人员提供的所有自由,我有一个问题。我想使my_file.inc仅用于一个特定元层中的配方。我知道,例如,在local.conf中使用INHERIT关键字将使my_class.bbclass文件全局可用于每个配方。
添加这个是一个好习惯:
require my_file.inc
在layer.conf里面?或者我应该将my_file.inc更改为my_file.bbclass,并将INHERIT =“my_file.bbclass”添加到layer.conf中?还有其他可能吗?
即使它似乎有效,但您的方法在技术上都不完全正确。关键是所有.conf
文件首先被解析,它们包含的所有内容在整个构建过程中都是全局可见的。因此,如果你通过layer.conf
文件添加一些内容,它不是通过一个意想不到的地方进入,它也不仅仅限制该层,因此可能会导致其他地方的破坏。
虽然我没有一个非常好的和干净的解决方案,但以下可能对您有所帮助:
您可以使自定义食谱对DISTRO_FEATURES
或MACHINE_FEATURES
中的某些关键字做出反应。然后你可以创建一个两阶段的方法:
local.conf
(或您的MACHINE
,或DISTRO
,或任何配置)中添加所需的关键字.bbclass
并为相应的配方拉入它可能会很有用。这样就可以正确地包含效果。
也许来自Yocto项目的部分5.1.3.2回答了你的问题:
避免重复包含文件。对每个使用包含文件的配方使用附加文件(.bbappend)。或者,如果要引入需要包含文件的新配方,请使用相对于原始图层目录的路径来引用该文件。例如,使用require recipes-core / package / file.inc而不是require file.inc。如果您发现必须覆盖包含文件,则可能表示包含文件在其最初所属的层中存在缺陷。如果是这种情况,您应该尝试解决该缺陷而不是覆盖包含文件。例如,您可以通过使include文件的维护者添加一个或多个变量来轻松覆盖需要覆盖的部分来解决这个问题。
因此,为避免以后重复包含,最好不要以这种方式包含.inc
文件。