Yocto 如何将配方仅限于本地和本地DK?

Yocto 如何将配方仅限于本地和本地DK?,yocto,bitbake,openembedded,Yocto,Bitbake,Openembedded,我有一个食谱,我想防止被建立的目标 我理解,给定一个配方xyz.bb,添加BBCLASSEXTEND+=“native nativesdk”“神奇地”允许以下所有操作: $ bitbake xyz # 1 $ bitbake nativesdk-xyz # 2 $ bitbake xyz-native # 3 我只想要2号和3号。我明确地不想让数字1成为可能(也许xyz有一个GPLv3许可证,所以我从不希望它出现在目标映像中) 我尝试将配方命名为xyz native.

我有一个食谱,我想防止被建立的目标

我理解,给定一个配方
xyz.bb
,添加
BBCLASSEXTEND+=“native nativesdk”
“神奇地”允许以下所有操作:

$ bitbake xyz           # 1
$ bitbake nativesdk-xyz # 2
$ bitbake xyz-native    # 3
我只想要2号和3号。我明确地不想让数字1成为可能(也许
xyz
有一个GPLv3许可证,所以我从不希望它出现在目标映像中)

我尝试将配方命名为
xyz native.bb
并添加
BBCLASSEXTEND+=“nativesdk”
,但这产生了如下可构建目标

$ bitbake xyz-native           # which is what I want
$ bitbake nativesdk-xyz-native # which is NOT what I want
我能看到的唯一其他选项是将
xyz.bb
重命名为
xyz.inc
,然后创建
nativesdk xyz.bb
xyz native.bb
,两者都只需要通用的
xyz.inc
文件


我遗漏了什么?

您应该创建两个相互包含的bitbake配方。第一个bitbake配方将是native和nativesdk,第二个将用于目标。在目标bitbake配方中,您可以在do install步骤中删除与目标文件相关的内容,如下所示

xyx.bb(目标配方)


您没有为创建的配方添加必需的类-native和nativesdk

$ grep -rn inherit test-layer/recipes-example/example/ 
test-layer/recipes-example/example/nativesdk-example_0.1.bb:5:inherit nativesdk
test-layer/recipes-example/example/example-native_0.1.bb:5:inherit native
然后您将看到本地和本地DK配方:

$ bitbake -s | grep example
example-native                                        :0.1-r0                                                  
nativesdk-example                                     :0.1-r0    

如果您的情况是授权,那么有一个更好的解决方案:只需设置
不兼容的\u许可证
,bitbake就不会让任何不兼容的内容进入映像


如果你有其他神秘的原因想要拒绝让配方的目标构建成功,那么你可以使用一些匿名Python来检查
类target
是否处于
覆盖
中,如果是,请提高
SkipRecipe

谢谢,但正如我所说的,我明确不希望它们能够为目标构建。我不仅需要清理映像(我的
do\u install\u append
将是
rm-rf${d}
),还需要清理sysroot等。好的,因此您建议使用两种方法(
-native
nativesdk-
)包括一个通用的
.inc
文件。这就是我期望的方式,我只是希望会有更简单/更干净的东西。事实上,这是唯一的一种方式(根据我的知识),在这样的场景中没有目标配方-默认情况下,配方是为目标创建的,所以显式的native和nativesdk允许存档。@lukaszgard
native
nativesdk
之间有什么区别。在这两种情况下(native和nativesdk),配方中构建的二进制/库都将用于主机PC(我们正在运行bitbake)正确吗?@RaviA您是对的,两个目标都基于主机架构生成配方包/二进制,但主要区别在于nativesdk目标专用于生成二进制以在SDK中运行(这是用于生成的配方的示例)。但是在生成为依赖项期间,其他配方可以使用本机配方目标。@lukaszgard您能给出一个示例吗(类似于builtools tarball.bb)对于其他配方使用的本机配方目标。抱歉,这并不意味着误导。这不是授权,而是一个更复杂的构建问题。基本上,如果包是为目标构建的,它会以奇怪的方式破坏许多其他东西的构建。通常发生这种情况是因为有人在他们的应用程序中输入了错误(通常不使用-native)。所以我只想让它不可能发生。我真的不确定我想知道如何为target创建一个食谱,从而打破其他食谱…那么使用SkipRecipe。
$ bitbake -s | grep example
example-native                                        :0.1-r0                                                  
nativesdk-example                                     :0.1-r0