Tôi đang cố gắng hướng dẫn GNU Make 3.81 không dừng lại nếu một lệnh thất bại (vì vậy tôi đặt tiền tố cho lệnh -
) nhưng tôi cũng muốn kiểm tra trạng thái thoát trên lệnh tiếp theo và in một thông báo nhiều thông tin hơn. Tuy nhiên Makefile của tôi dưới đây không thành công:
$ 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!
Tại sao Makefile ở trên echo "thành công!" thay vì "thất bại!" ?
cập nhật:
Theo dõi và mở rộng câu trả lời được chấp nhận, dưới đây là cách viết:
failure:
@-/bin/false && ([ $$? -eq 0 ] && echo "success!") || echo "failure!"
success:
@-/bin/true && ([ $$? -eq 0 ] && echo "success!") || echo "failure!"
.SHELLFLAGS = -ec
nên được sử dụng. Nhưng trong trường hợp này, bạn không thể sử dụng -
tiền tố nhiều hơn (đối với lệnh cá nhân của biên nhận) vì make sẽ ghi lỗi đó bị bỏ qua nhưng vẫn sẽ thất bại trong tất cả các khối. Vì vậy, || :
là một trong những giải pháp để bỏ qua lệnh. Nhưng đó không phải là đa nền tảng (Windows chưa || :
hoặc || true
)
.ONESHELL:
chỉ thị.