如何在Yocto中多次构建同一个库?

时间:2016-09-28 03:39:24

标签: c++ c linux static-libraries yocto

我有两个应用程序,它们都使用相同的库,但是应该构建库,在一个中启用一个标志,在另一个中禁用。这是一个静态库,因此在运行时不会在运行时发生冲突。但是库是独立的,即应用程序是单独构建的,并且库是独立的。在每个配置中,库将使用不同的名称构建,由makefile处理。这可以手动完成。但现在我需要将它添加到Yocto。 在yocto中,如何在单独的配置中构建相同的库2次?

3 个答案:

答案 0 :(得分:1)

如果您仅限于.bbappend并且您不想复制食谱,则可以添加一些额外的tasks。在这些附加任务中(在常规安装之后),您可以再次进行配置/编译/安装,但可以使用任何其他操作/变量覆盖或其他任何操作。像这样:

do_special_configure() {
        oe_runmake clean
        export MAGIC_VARIABLE="magic value"
        do_configure
}

do_special_compile() {
        export MAGIC_VARIABLE="magic value"
        do_compile
}

fakeroot do_special_install() {
        export MAGIC_VARIABLE="magic value"
        do_install
}

do_special_configure[dirs] = "${B}"
do_special_compile[dirs] = "${B}"
do_special_install[dirs] = "${B}"

addtask special_configure after do_install before do_special_compile
addtask special_compile after do_special_configure before do_special_install
addtask special_install after do_special_compile before do_package do_populate_sysroot

答案 1 :(得分:0)

如果不同的配置确实产生了不同的已安装文件,那么添加两个恰好具有相同SRC_URI的单独配方就没有问题

答案 2 :(得分:0)

嗯,你不能,不能没有两个食谱。

您的两个应用程序,不能以任何方式影响库的使用方式。因此,您的选择(只要这两个应用程序应该可用于同一台机器/发行版组合)基本上是:

  1. 创建第二个配方(在这种情况下,可能在您的图层中,但最好在上游图层中)。如果您正在复制的配方在.inc和一个小.bb中使用,主要包含该文件,您可以轻松地执行相同操作。否则,您可以选择复制配方并进行修改,或者获取新配方

    require <PATH_FROM COREBASE-TO-THE-UPSTREAM-RECIPE>/upstream-recipe.bb
    
  2. 如果可能,修改上游配方(最好使用.bbappend)以同时构建您需要的两个版本。