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

How to build same library more than once in Yocto?

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

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

嗯,你不能,如果没有两个食谱的话。

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

  1. 创建第二个配方(在本例中,可能在您的层中,但最好在上游层中)。如果您要复制的食谱在 .inc 中使用,并且主要包含该文件的小 .bb,您可以轻松地执行相同的操作。否则,您的选择是复制配方并修改它,或者使用新配方

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

如果您限于 .bbappend 并且不想复制食谱,则可以添加一些额外的 tasks。在这些附加任务中(在常规安装之后),您可以再次执行 configuration/compilation/installation,但可以进行任何类型的附加 actions/variable 覆盖或其他操作。像这样:

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