Tôi muốn sử dụng $(error ...)
để hủy bỏ quy trình thực hiện của mình nếu các điều kiện tiên quyết nhất định không được đáp ứng. Mục tiêu fails_to_work
sẽ bị hủy khi không thành công test -d /foobar
.
BAD.mk
all: this_works fails_to_work
this_works:
@echo echo works...
@test -d ~ || echo ~ is not a directory
@test -d /foobar || echo /foobar is not a directory
fails_to_work:
@echo error does not work...
@test -d ~ || $(error ~ is not a directory)
@test -d /foobar || $(error /foobar is not a directory)
$ make -f BAD.mk
echo works...
/foobar is not a directory
BAD.mk:9: *** ~ is not a directory. Stop.
Như bạn thấy, thậm chí không "lỗi không hoạt động ..." được lặp lại vào màn hình. Công thức cho fails_to_work
không thành công trước khi bắt đầu. Tôi giải quyết điều này như thế nào? Một trong các trường hợp sử dụng của tôi là @test -d $(MY_ENV_VAR)
, nhưng tôi không nghĩ rằng khác với các đường dẫn mã hóa cứng được đưa ra trong ví dụ.
CẬP NHẬT (phiên bản thông tin)
$ make --version
GNU Make 3.81
Copyright (C) 2006 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE.
This program built for x86_64-pc-linux-gnu
Cảm ơn. Đề nghị đầu tiên của bạn hoạt động (mà tôi đang áp dụng như vậy: 'if! Test -d/foobar; sau đó echo"/foobar không phải là một thư mục "; thoát 1; fi'), nhưng thứ hai của bạn thì không. Với một thư mục hợp lệ, lỗi vẫn được nhấn. –