Как собрать одну и ту же библиотеку в Yocto более одного раза?

У меня есть 2 приложения, оба используют одну и ту же библиотеку, но библиотека должна быть собрана с включенным флагом в одном и отключенным в другом. это статическая библиотека, поэтому во время выполнения не будет конфликта во время выполнения. Но библиотека отдельная, т.е. приложение создается отдельно, а библиотека — отдельно. В каждой конфигурации библиотека будет собираться с другим именем, которое заботится make-файл. Это можно сделать вручную. но теперь мне нужно добавить его в Yocto.
В yocto, как я могу собрать одну и ту же библиотеку 2 раза в отдельной конфигурации?

0

Решение

Если вы ограничены .bbappend и вы не хотите дублировать рецепт, вы можете добавить некоторые дополнительные задачи затем. В этих дополнительных задачах (после обычной установки) вы можете выполнить настройку / компиляцию / установку еще раз, но с любыми дополнительными действиями / переопределениями переменных или любым другим способом. Что-то вроде этого:

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

Другие решения

Если разные конфигурации действительно создают разные установленные файлы, у вас не возникнет проблем с добавлением двух отдельных рецептов, которые просто имеют одинаковый SRC_URI

0

Ну, вы не можете, не без двух рецептов.

Ваши два приложения никак не могут повлиять на то, как используется библиотека. Таким образом, ваши варианты (если оба эти приложения должны быть доступны для одной и той же машины / дистрибутива) в основном:

  1. Создайте 2-й рецепт (в этом случае, вероятно, в вашем слое, хотя желательно в верхнем слое). Если рецепт, который вы копируете, использует в .inc и маленький .bb это в основном включает в себя этот файл, вы можете легко сделать то же самое. В противном случае вы можете либо скопировать рецепт и изменить его, либо получить новый рецепт.

    require <PATH_FROM COREBASE-TO-THE-UPSTREAM-RECIPE>/upstream-recipe.bb
    
  2. Если возможно, измените рецепт выше по течению (желательно используя .bbappend) одновременно создавать обе версии, которые вам требуются.

0
По вопросам рекламы [email protected]