在 yocto 中使用 layer.conf 中的 require

using require in layer.conf in yocto

考虑到 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? 还有其他可能吗?

也许 Yocto 项目的 5.1.3.2 部分回答了您的问题:

Avoid duplicating include files. Use append files (.bbappend) for each recipe that uses an include file. Or, if you are introducing a new recipe that requires the included file, use the path relative to the original layer directory to refer to the file. For example, use require recipes-core/package/file.inc instead of require file.inc. If you're finding you have to overlay the include file, it could indicate a deficiency in the include file in the layer to which it originally belongs. If this is the case, you should try to address that deficiency instead of overlaying the include file. For example, you could address this by getting the maintainer of the include file to add a variable or variables to make it easy to override the parts needing to be overridden.

因此,为了避免以后重复包含,最好不要以这种方式包含您的 .inc 文件。

即使看起来可行,您的两种方法在技术上都不是完全正确的。关键是首先解析所有 .conf 个文件,并且它们包含的所有内容在整个构建过程中都是全局可见的。因此,如果您通过 layer.conf 文件添加内容,它不会从意想不到的地方被拉入,它也不会仅限于该层,因此可能会导致其他地方损坏。

虽然我没有真正好的和干净的解决方案,但也许以下内容可以帮助您:

您可以让您的自定义食谱对 DISTRO_FEATURESMACHINE_FEATURES 中的某些关键字做出反应。然后你可以创建一个两阶段的方法:

  1. local.conf(或您的 MACHINEDISTRO 或任何配置中添加所需的关键字

  2. 让食谱做出反应。如果您在多个地方需要该机制,那么将它倒入您的图层带来的 .bbclass 中并且您为各自的食谱拉入可能会很有用。

这样效果就很好地包含了。