2015-06-23 2 views
1

Задача

Учитывая правило 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.

ответ

1

Ваша return_code=$? линия должна быть выполнена в ЖЕ субоболочке с предыдущей командой оболочки -$(MAKE) $(MAKECMDGOALS), как это:

mytarget: 
    # intro actions 
    -make whatever; \ 
     return_code=$$?; \ 
     # end actions; \ 
     exit $$return_code 

При выполнении #end ections на отдельной строке рецепта без использования \, то Значение $? просто теряется, когда подоболочка завершается.

+0

У вас есть правильная идея, но вы забыли избежать переменных оболочки; как '$?' (должно быть '$$?' здесь), так и '$ return_code' (должно быть' $$ return_code', без круглых скобок) являются переменными _shell_, которые не производят переменные. Хотя, я действительно не вижу смысла в решении этой проблемы, чтобы вернуть код выхода, а затем использовать '-' в качестве префикса строки рецепта, который игнорирует коды выхода ... – MadScientist

+0

@MadScientist вы правы в том, переменные -makefile! Я просто пропустил тест на дым на моей машине, что всегда является ошибкой. Большое спасибо. –

+0

@EugeniuRosca, я надеялся, что это будет сделано без включения всех вызовов в один большой процесс с оболочкой. Каждый шаг будет независимой командой 'make'. Я подозреваю, что ваш ответ «_Your return_code = $? Line должен быть выполнен в SAME подоболочке с предыдущей командой shell_». Я просто надеялся, что «сделать» было возможно. Благодаря! – JamesThomasMoon1979

Смежные вопросы