简单安装本机脚本以用于其他配方

kdo*_*pen 7 openembedded bitbake yocto

我需要foo在一个配方(foo-native)中安装一个本机脚本,调用它,然后在do_compile另一个(目标)配方的步骤中使用它- 调用它bar.

我的(最小)原生食谱

SRC_URI = "file://foo"
LICENSE = "CLOSED"

inherit native

BBCLASSEXTEND = "native"

S = "${WORKDIR}"

do_compile() { 
    : 
}

do_install() {
    install -d ${D}/usr/bin
    install ${WORKDIR}/foo ${D}/usr/bin
}
Run Code Online (Sandbox Code Playgroud)

该脚本foo存在于一个目录中,该目录files位于配方旁边.即

foo/
??? files
?   ??? foo
??? foo.bb
Run Code Online (Sandbox Code Playgroud)

我的目标食谱 bar

SRC_URI = ""
LICENSE = "CLOSED"

DEPENDS = "foo-native"

do_fetch[noexec] = "1"
do_configure[noexec] = "1"

do_compile() {
    foo >myfile.json
}

do_install() {
    install -d ${D}/etc
    install ${WORKDIR}/myfile.json ${D}/etc
}
Run Code Online (Sandbox Code Playgroud)

我得到的错误是在do_compile任务中bar,它只是说foo无法找到(即没有安装到路径上的目录中).

And*_*ers 7

首先,你不需要这条线

inherit native
Run Code Online (Sandbox Code Playgroud)

foo.bb.它由你照顾BBCLASSEXTEND = "native".

其次,将你do_install改为:

do_install() {
    install -d ${D}${bindir}
    install ${WORKDIR}/foo ${D}${bindir}
}
Run Code Online (Sandbox Code Playgroud)

注意:使用${bindir}而不是/usr/bin.${bindir}确定是使用${prefix},例如在构建-native配方版本时改变.

  • bindir-change是真正的修复,但作为删除"继承本机"的替代方法,您还可以重命名配方"foo-native.bb",保留"继承本机"并删除BBCLASSEXTEND:我建议将其用于食谱这是为了本地目的,因为它使这个意图非常清楚. (2认同)
  • 是的,也许我应该更明确地说明 `bindir` 更改是解决方案。此外,拥有“foo-native”配方是个好主意,只要您不需要为目标或 SDK 构建配方...因此,您可能需要带有“BBCLASSEXTEND =”的配方native nativesdk"` 用于很多东西。 (2认同)