V makefile-:
mycommand || (echo "mycommand failed $$?"; exit 1)
Každý řádek v akci makefile vyvolá nový shell - chyba musí být zkontrolována v akčním řádku, kde příkaz selhal.
Pokud příkaz mycommand selže, logika se rozvětví na příkaz echo a skončí.
 Pokud vše, co chcete, je pro make bude přerušeno, pokud nástroj skončí s nenulovým stavem, make již to udělá ve výchozím nastavení.
 Příklad Makefile :
a: b
    @echo making [email protected]
b:
    @echo making [email protected]
    @false
    @echo already failed
 .To je to, co se stane s mým make :
$ make
making b
make: *** [Makefile:6: b] Error 1
Ujistěte se, že částečně nebo zcela vytvořené cíle jsou odstraněny v případě, že selžete. Například toto
a: b
    @gena $+ > [email protected]
b:
    @genb > [email protected]
 je nesprávné:pokud na první pokus, genb selže, pravděpodobně zanechá nesprávné b , což na druhý pokus make bude předpokládat, že je správné. Takže musíte udělat něco jako
a: b
    @gena $+ > [email protected] || { rm [email protected]; exit 1; }
b:
    @genb > [email protected]
Zde je několik dalších přístupů:
shell &.SHELLSTATUS 
 some_recipe:
    @echo $(shell echo 'doing stuff'; exit 123)
    @echo 'command exited with $(.SHELLSTATUS)'
    @exit $(.SHELLSTATUS)
Výstup:
$ make some_recipe
doing stuff
command exited with 123      
make: *** [Makefile:4: some_recipe] Error 123
 Má to výhradu, že shell výstup příkazu není streamován, takže po dokončení skončíte s výpisem do stdout.
$? 
 some_recipe:
    @echo 'doing stuff'; sh -c 'exit 123';\
    EXIT_CODE=$$?;\
    echo "command exited with $$EXIT_CODE";\
    exit $$EXIT_CODE
Nebo o něco jednodušší čtení:
.ONESHELL:
some_recipe:
    @echo 'doing stuff'; sh -c 'exit 123'
    @EXIT_CODE=$$?
    @echo "command exited with $$EXIT_CODE"
    @exit $$EXIT_CODE
Výstup:
$ make some_recipe
doing stuff                  
command exited with 123      
make: *** [Makefile:2: some_recipe] Error 123
Je to v podstatě jeden řetězec příkazů, prováděný ve stejném shellu.