Я пытаюсь дать команду GNU Make 3.81 не останавливаться в случае сбоя команды (поэтому я ставлю команду с префиксом -
), но я также хочу проверить состояние завершения следующей команды и распечатать более информативное сообщение. Однако мой Makefile ниже не работает:
$ cat Makefile
all:
-/bin/false
([ $$? -eq 0 ] && echo "success!") || echo "failure!"
$
$ make
/bin/false
make: [all] Error 1 (ignored)
([ $? -eq 0 ] && echo "success!") || echo "failure!"
success!
Почему Makefile выше эхом "успех!" вместо "провал!" ?
Обновить:
Следуя и расширяя принятый ответ, ниже следует, как он должен быть написан:
failure:
@-/bin/false && ([ $$? -eq 0 ] && echo "success!") || echo "failure!"
success:
@-/bin/true && ([ $$? -eq 0 ] && echo "success!") || echo "failure!"
.SHELLFLAGS = -ec
следует использовать. Но в этом случае вы не можете использовать -
префикс больше (для личной команды квитанции), потому что make напишет, что ошибка игнорируется, но все равно завершится с ошибкой весь блок. Таким образом, || :
это решение игнорировать команду. Но это не кроссплатформенность (у Windows нет || :
или нет || true
)
.ONESHELL:
директиву.