如何将配方限制为仅native和nativesdk?

时间:2018-12-04 22:19:41

标签: yocto bitbake openembedded

我有一个食谱,我想防止它成为目标。

我了解,给定食谱xyz.bb,“神奇地”添加BBCLASSEXTEND += " native nativesdk"可以满足以下所有条件:

$ bitbake xyz           # 1
$ bitbake nativesdk-xyz # 2
$ bitbake xyz-native    # 3

我只想 2号和3号。我明确地希望1号成为可能(也许xyz拥有GPL v3许可证,所以我从不需要在目标图像中

我尝试命名配方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.bbxyz-native.bb,而这两个文件都只需要公共xyz.inc文件

我想念什么?

3 个答案:

答案 0 :(得分:1)

您错过了为创建的食谱添加必需的类- 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

然后您将看到native和nativesdk食谱:

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

答案 1 :(得分:0)

您应该创建2个互相包含的比特烤食谱。第一个位烘烤配方将是native和nativesdk,第二个将是目标。在目标Bitbake配方中,您可以像这样在do install步骤中删除与目标文件有关的内容。

xyx.bb(目标配方)

do_install_append() {
    rm -f ${D}the_files_which_you_want_do_delete
}

答案 2 :(得分:0)

如果您的情况是许可的,那么有一个更好的解决方案:只需设置INCOMPATIBLE_LICENSES,然后bitbake就不会让任何与映像不兼容的内容出现。

如果您还有其他神秘的原因想要拒绝让配方的目标版本成功,则可以使用一些匿名Python检查class-target是否在OVERRIDES中,如果存在,请提高SkipRecipe