如何在OpenEmbedded BitBake配方中递归安装目录结构?

时间:2015-08-04 19:03:52

标签: shell recipe bitbake openembedded

我想简化一个BitBake配方,通过使用某种递归安装例程而不是多次调用install来安装大型目录结构。源目录布局在开发过程中经常发生变化,这导致了比我想要处理的更多的配方修订。

作为示例,如何简化以下do_install():

do_install() {
    install -d ${D}/foo
    install -m 0644 ${S}/foo/*.* ${D}/foo

    install -d ${D}/foo/a
    install -m 0644 ${S}/foo/a/*.* ${D}/foo/a

    install -d ${D}/foo/b
    install -m 0644 ${S}/foo/b/*.* ${D}/foo/b

    install -d ${D}/foo/c
    install -m 0644 ${S}/foo/c/*.* ${D}/foo/c

    install -d ${D}/bar
    install -m 0644 ${S}/bar/*.* ${D}/bar

    install -d ${D}/bar/a
    install -m 0644 ${S}/bar/a/*.* ${D}/bar/a

    install -d ${D}/bar/a/bananas
    install -m 0644 ${S}/bar/a/bananas/*.* ${D}/bar/a/bananas
}

更喜欢这种伪代码:

do_install() {
    for each subdir in ${S}/foo/
        install subdir recursively to ${D}/foo/subdir
    end

    for each subdir in ${S}/bar/
        install subdir recursively to ${D}/bar/subdir
    end
}

源文件中的顶级目录(上例中的foo& bar)很少更改,因此在配方中调用它们很好。这是经常变化的低级目录。

可能是cp -r最终成为了可行的方法,但我相信我已经读到它在BitBake配方中不赞成,所以我想知道BitBake是否提供了一些替代机制,或者是否有 其他一些合理标准化的方法。

2 个答案:

答案 0 :(得分:4)

我们曾经这样做过:

do_install() {
find ${WORKDIR}/ -type f -exec 'install -m 0755 "{}" ${D}/var/www/' \;
}

答案 1 :(得分:2)

OE中的规范形式是

cp -R --no-dereference --preserve=mode,links -v SOURCE DESTINATION

看到答案here(虽然它们在代码中看起来有点不同,但问题在语义上是等价的)