Tôi đã gặp một số hành vi kỳ lạ khi sử dụng Thực hiện gần đây (v3.81).Tôi có thể yêu cầu Thực hiện bỏ qua các biến môi trường không?
Giả sử tôi đã Makefile sau:
FOOBAR = $(shell find nonexistentdirectory -iname "foobar" | tr '\n' ' ')
all:
@echo "Hi"
clean:
@echo "Hi again"
Có vẻ đơn giản đủ, đúng không? Đáng chú ý, FOOBAR
là một "biến mở rộng đệ quy", do đó, nó không nên được đánh giá cho đến khi tôi đề cập đến nó. Lưu ý rằng tôi không bao giờ đề cập đến nó. Cũng lưu ý rằng nonexistentdirectory
không tồn tại như bạn mong đợi.
Bây giờ giả sử tôi đặt FOOBAR
trong vỏ trước khi tôi gọi một mục tiêu Make:
compy386$ FOOBAR="stuff" make clean
find: nonexistentdirectory: No such file or directory
Hi again
Tại sao FOOBAR
đang được đánh giá? Rõ ràng nó có một cái gì đó để làm với thực tế là biến được định nghĩa trong trình bao. Tôi có dự đoán rằng người dùng có thể đã đặt các biến số trong trình bao của họ không? Tôi làm gì sai ở đây?!