Мне нужен совет о том, как обрабатывать ошибки в заданиях на рецепт.Рассмотрим следующий фрагмент для рецепта рецепта Yocto:
do_compile_custom() {
oe_runmake // oe_runmake command fails
}
addtask compile_custom after do_compile before do_install
Когда oe_runmake
не удается, я хочу выполнить некоторую пользовательскую команду и продолжить сборку, поэтому я подумал, что это должно работать.
do_compile_custom() {
oe_runmake || true // oe_runmake command fails
if [ $? -ne 0 ]; then
bberror "MAKE FAILED"
fi
}
addtask compile_custom after do_compile before do_install
Но когда oe_runmake
не удается, он выходит из задачи, а остальная часть задачи не выполняется.Я не вижу
MAKE FAILED
в моем журнале сборки.
Я начал исследовать события битового выпекания, поэтому следующее, что я сделал, - добавил обработчик событий в свой рецепт, без каких-либо фильтров событий, чтобы увидеть все полученные события.
do_compile_custom() {
oe_runmake // oe_runmake command fails
}
addtask compile_custom after do_compile before do_install
addhandler failure_eventhandler
python failure_eventhandler() {
from bb.event import getName
print("strtogrep The name of the Event is %s" % getName(e))
}
С этой реализацией рецепта из обработчика я могу видеть только 3 напечатанных события:
| The name of the Event is RecipePreFinalise
| The name of the Event is RecipeTaskPreProcess
| The name of the Event is RecipeParsed
Из всех событий, определенных в bitbake, я ожидал получить TaskFailed
Событие после сбоя задачино это никогда не получено.У кого-нибудь есть предложения, как с этим справиться?