2016-04-27 8 views
0

Как я могу прервать make-файл от продолжения других целей, если в текущем целевом объекте выполняется определенное условие.Как отменить make-файл без сообщения об ошибке

Например:

Step01: 
    @# Do something 

Step02: Step01_Output 
    @# Check that Step01_output meet certain condition, otherwise, abort 

Step03: Step02 
    @# Do somethings (of course if did not abort in Step02) 

# And so on 

Я попытался с помощью "выход" со статусом 0 ==> Но он продолжает все-таки! Я попытался использовать «exit 1» или другой существующий статус ==> Он прерывает, но выводит сообщение об ошибке на выходе. Я хочу прервать, но все же не дать сообщение об ошибке в make call shell. Я пытался также установить переменную ENV из Step02 и окружать Step03 и после того, как в случае проверки, как это:

ifneq ($(ToAbort),1) 
Step03: 
... 
StepN 

endif 

К сожалению, кажется, что делают даже не смотрел на состояние или значение переменной не передается между цели.

Любые идеи? Может быть, добавление дополнительной цели или так?

+1

Пожалуйста, представьте реальный пример вместо псевдокода, есть вероятность, что это может быть проблема [XY] (http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem) , – user657267

ответ

0

Я думаю, что делать выходы только тогда, когда создаются цели или возникает какая-либо ошибка. Кстати, команды выполняются в подклассов, так что использование `exit 'не приведет к тому, что make выйдет.

0

Не уверен, что ваше мышление верное на этом. Оставить отбраковку работ до сделать.

Однако вы можете выразить то, что вы просили с небольшим количеством оболочки и рекурсивный сделать (извините). Вы хотите выразить «если a заканчивается с ошибкой/без ошибок, тогда мы закончили, а продолжаем с b."

Step01: 
    command1 
    command2 
    command3 && ${MAKE} Step02 
    command4 

Step02: 
    cmd5 
    cmd6 && ${MAKE} Step03 

⋮ 

Обратите внимание на эти амперсанды. if command3; then ${MAKE} Step02; fi не делает, что вы хотите. Если сделать не удалось, вы не хотите продолжать в command4.

P.S. Не забудьте отметить эти шаги как PHONY, если они не являются реальными файлами.

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

  • Нет связанных вопросов^_^