Saya mencoba untuk menginstruksikan GNU Make 3.81 untuk tidak berhenti jika suatu perintah gagal (jadi saya awali perintah dengan -
) tetapi saya juga ingin memeriksa status keluar pada perintah berikutnya dan mencetak pesan yang lebih informatif. Namun Makefile saya di bawah gagal:
$ 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!
Mengapa Makefile di atas bergema "sukses!" bukannya "gagal!" ?
memperbarui:
Mengikuti dan memperluas jawaban yang diterima, di bawah ini adalah bagaimana seharusnya ditulis:
failure:
@-/bin/false && ([ $$? -eq 0 ] && echo "success!") || echo "failure!"
success:
@-/bin/true && ([ $$? -eq 0 ] && echo "success!") || echo "failure!"
.SHELLFLAGS = -ec
sebaiknya digunakan. Tetapi dalam hal ini Anda tidak dapat menggunakan -
awalan lebih (untuk perintah tanda terima pribadi) karena make akan menulis bahwa kesalahan diabaikan tetapi masih akan gagal semua blok. Jadi, || :
merupakan salah satu solusi untuk mengabaikan perintah. Tapi itu bukan cross-platform (Windows belum || :
atau || true
)
.ONESHELL:
arahan.