Как проверить статус выхода вызова оболочки Makefile?

У меня есть Makefile, который запускает программу, которая с успехом возвращает ненулевое значение, а при ошибке возвращает другое ненулевое значение. Я знаю, что я могу игнорировать статус выхода, префикс команды с помощью -, но это не работает, потому что мне нужно знать, удалась ли команда.

Ответы

Ответ 1

Вы можете проверить возвращаемое значение второй команды в той же строке Makefile, используя переменную shell $?, которая содержит последнее возвращаемое значение.

Например, с помощью команды false, которая, очевидно, остановит компиляцию:

test:
    /bin/false ; /usr/bin/test "$$?" -eq 1     # <-- make does not stop here
    /bin/echo "Continues ..."
    /bin/false                                 # <-- make stops here

Ответ 2

Использование

command || [ $$? -eq v ]

в качестве вашей команды, заменив команду командой, и v со значением, полученным при успешном завершении.

(Это всего лишь более компактная версия ответа Дидье Троссе.)

Ответ 3

В зависимости от того, как инструмент ведет себя с ошибкой, вы можете просто проверить наличие выходного файла. что-то вроде:

@if test ! -f $(FILE); then exit 2; fi