Tôi vẫn không hiểu tại sao quy tắc "giả mạo" trong Makefiles có ".PHONY" là mục tiêu của chúng. Nó sẽ hợp lý hơn nhiều khi điều kiện tiên quyết là.Tại sao .PHONY: nhắm mục tiêu và không nhắm mục tiêu: .PHONY?
Tôi có phải giải thích kỹ về điều này không? Nếu A
phụ thuộc vào B
và B
là giả mạo thì A
cũng là giả mạo. Vì vậy, biểu đồ phụ thuộc .PHONY
← B
→ A
là waay đáng ngạc nhiên so với .PHONY
→ B
→ A
. (Một lý lẽ khác là việc triển khai make
phải xử lý mục tiêu .PHONY
rất đặc biệt.)
Trong khi phê bình này có vẻ khá lý thuyết (vô nghĩa), cú pháp của nó vẫn ở đây ". Nhưng tôi không đề xuất bất kỳ sự thay đổi cú pháp, có một sự thay thế:
Với GNU Make (ít nhất), các Makefile sau tuyên bố một giả mạo target_A
:
target_A: _PHONY
touch target_A
_PHONY:
#noop
Câu hỏi 1: này là để đơn giản và sạch sẽ, chắc chắn tôi không phải là nhà phát minh đầu tiên của nó. Trên thực tế, với phương án này, tại sao make
cần cú pháp đặc biệt nào?
Dường như với tôi rằng điều này cũng sẽ khá độc đáo giải quyết các câu hỏi về wildcards in phony targets và thậm chí có thể shed some light on .PHONY's meaning khi người mới bắt đầu nghi ngờ.
Câu hỏi 2: Bạn có thể nghĩ đến bất kỳ hoàn cảnh nào mà phương pháp này kém hơn không? (? Là cách gọi make .PHONY
của bất kỳ sử dụng)
(tôi nên đề cập rằng trong khi tôi đã gọi make
s khác, GNU Make là việc thực hiện duy nhất mà tôi có một số kinh nghiệm với -. Đọc và viết Makefiles)
(nên có RTFM) GNU Thực hiện thủ công thực sự [đề cập đến công thức này] (http://www.gnu.org/software/make/manual/html_node/Force-Targets.html#Force-Targets) càng ít hiệu quả, nhưng di động hơn. Tôi phỏng đoán rằng tốc độ tăng lên nhanh chóng. Điều này cho thấy một câu trả lời tiêu cực cho câu hỏi 2. (?) – tiwo