Bir komutun başarısız olması durumunda GNU Make 3.81'e durmamasını söylemeye çalışıyorum (bu yüzden komutu ön ekliyorum -
) ama bir sonraki komutun çıkış durumunu kontrol etmek ve daha bilgilendirici bir mesaj yazdırmak istiyorum. Ancak aşağıdaki Makefile dosyam başarısız oluyor:
$ 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!
Neden yukarıdaki Makefile "başarı!" yerine "başarısızlık!" ?
güncelleştirme:
Kabul edilen cevabın ardından ve genişleyen, aşağıda nasıl yazılması gerektiğidir:
failure:
@-/bin/false && ([ $$? -eq 0 ] && echo "success!") || echo "failure!"
success:
@-/bin/true && ([ $$? -eq 0 ] && echo "success!") || echo "failure!"
.SHELLFLAGS = -ec
için kullanılmalıdır. Ancak bu durumda -
öneki daha fazla kullanamazsınız (makbuzun kişisel emri için), make bu hatayı görmezden gelir, ancak yine de tüm blokta başarısız olur. Yani, || :
komutu görmezden gelmek için bir çözümdür. Ancak platformlar arası değil (Windows yok || :
veya || true
)
.ONESHELL:
Direktifi araştırmak isteyebilirsiniz .