2017-08-29 31 views
3

对于给定的例子:添加bbappend有条件的任务,而不覆盖配方功能

现有配方: [some-yocto-upstream-thing_1.0.bb]

do_configure_prepend() { 
    <necessary logic> 
} 

BBCLASSEXTEND = "native nativesdk" 

我创建这个配方的一个bbappend需要有一个我写的函数在do_configure_prepend被调用之前被调用。但我只想要为类目标调用此函数,而不是为类本地编译。

我可以创建一个do_configure_prepend_class-target,但会覆盖配方版本(在类目标构建过程中)。但是现在所需的逻辑将不会运行。

我可以创建一个自定义任务,在do_configure_prepend(通过addtask)之前调用,但这也是类本地调用(不需要)。

任何想法?我宁愿避免只是覆盖较早的内置任务(do_patch等),因为上游配方最终可能会定义一个,我会打破它。

回答

2

没有使用

do_configure_prepend_class-target() { 
    <necessary logic> 
} 

应该工作。对于class-targetdo_configure将以您的代码为前缀。

这种带覆盖的预置的一个例子是OE-Core/go.inc

+0

但是现在的yocto do_configure_prepend不会被调用,因为我在目标构建期间用do_configure_prepend_class-target替换它。这可以防止“<必要的逻辑>”运行。要清楚的是,“<必要的逻辑>”存在于yocto配方中。我正在介绍的函数包括我需要执行的其他逻辑。在这方面,你的榜样会混淆事物。 –

+0

不,你可以在食谱中有多个'_prepend',他们都会应用。 – Anders

+1

如果以相反方式执行操作,则会出现问题:'do_configure_class-target_prepend'。这将取消任何非'_class-target'值。 – Anders