У меня есть 2 приложения, оба используют одну и ту же библиотеку, но библиотека должна быть собрана с включенным флагом в одном и отключенным в другом. это статическая библиотека, поэтому во время выполнения не будет конфликта во время выполнения. Но библиотека отдельная, т.е. приложение создается отдельно, а библиотека — отдельно. В каждой конфигурации библиотека будет собираться с другим именем, которое заботится make-файл. Это можно сделать вручную. но теперь мне нужно добавить его в Yocto.
В yocto, как я могу собрать одну и ту же библиотеку 2 раза в отдельной конфигурации?
Если вы ограничены .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
Если разные конфигурации действительно создают разные установленные файлы, у вас не возникнет проблем с добавлением двух отдельных рецептов, которые просто имеют одинаковый SRC_URI
Ну, вы не можете, не без двух рецептов.
Ваши два приложения никак не могут повлиять на то, как используется библиотека. Таким образом, ваши варианты (если оба эти приложения должны быть доступны для одной и той же машины / дистрибутива) в основном:
Создайте 2-й рецепт (в этом случае, вероятно, в вашем слое, хотя желательно в верхнем слое). Если рецепт, который вы копируете, использует в .inc
и маленький .bb
это в основном включает в себя этот файл, вы можете легко сделать то же самое. В противном случае вы можете либо скопировать рецепт и изменить его, либо получить новый рецепт.
require <PATH_FROM COREBASE-TO-THE-UPSTREAM-RECIPE>/upstream-recipe.bb
Если возможно, измените рецепт выше по течению (желательно используя .bbappend
) одновременно создавать обе версии, которые вам требуются.