Задача
Учитывая правило make, которое должно вернуть код неисправности из средней части сэндвича, как сохранить и затем вернуть этот код неисправности?
В частности, учитывая make
цель, какmake: как сохранить код отказа предыдущей команды, а затем вернуть этот код ошибки?
mytarget:
do some necessary beginning for all targets that must occur for every run of this Makefile
-$(MAKE) $(MAKECMDGOALS)
do some necessary ending for all targets that must occur for every run of this Makefile
# more targets follow
Как иметь make
выход с кодом возврата команды -$(MAKE) $(MAKECMDGOALS)
?
То есть, как
mytarget:
do some necessary beginning for all targets that must occur for every run of this Makefile
-$(MAKE) $(MAKECMDGOALS)
return_code=$? # psuedo-code
do some necessary ending for all targets that must occur for every run of this Makefile
exit $(return_code)
Это должно происходить без опции --ignore-errors
.
Update
@EugeniuRosca предоставил вполне разумный ответ, «Вашей код_возврат = $? Линия должна быть выполнена в ОДНОМ субоболочке с предыдущей командой оболочки».
Однако я надеялся на ответ, который использовал возможности native make.
У вас есть правильная идея, но вы забыли избежать переменных оболочки; как '$?' (должно быть '$$?' здесь), так и '$ return_code' (должно быть' $$ return_code', без круглых скобок) являются переменными _shell_, которые не производят переменные. Хотя, я действительно не вижу смысла в решении этой проблемы, чтобы вернуть код выхода, а затем использовать '-' в качестве префикса строки рецепта, который игнорирует коды выхода ... – MadScientist
@MadScientist вы правы в том, переменные -makefile! Я просто пропустил тест на дым на моей машине, что всегда является ошибкой. Большое спасибо. –
@EugeniuRosca, я надеялся, что это будет сделано без включения всех вызовов в один большой процесс с оболочкой. Каждый шаг будет независимой командой 'make'. Я подозреваю, что ваш ответ «_Your return_code = $? Line должен быть выполнен в SAME подоболочке с предыдущей командой shell_». Я просто надеялся, что «сделать» было возможно. Благодаря! – JamesThomasMoon1979