Chắc chắn rồi, nhưng khi nào bạn muốn nó nhổ chúng ra?
Để báo cáo tên của mục tiêu khi nó chạy quy tắc, hãy đặt một dòng trong quy tắc:
foo$(VAR): $(PREREQS)
@echo now making the foo target: $@
do_other_stuff...
Để loại bỏ tất cả chúng cùng một lúc, bạn có thể tạo một mục tiêu PHONY riêng biệt:
.PHONY: show_vars
show_vars:
@echo foo$(VAR)
@echo bar$(PARAM) blah$(FLAG)
# and so on
Và điều này có thể được coi là điều kiện tiên quyết của mục tiêu mặc định của bạn:
all: show_vars
...
CHỈNH SỬA:
Bạn muốn có một cách để hiển thị tất cả các mục tiêu có thể có của một makefile tùy ý, mà tôi cho rằng có nghĩa là không xâm phạm. Tốt...
Để làm điều đó chính xác và có thể đối phó với các cấu hình phức tạp, chẳng hạn như liên quan đến các quy tắc được xây dựng bởi các eval
câu lệnh, bạn phải viết một cái gì đó gần với Trình giả lập Make. Không thực tế.
Để xem mục tiêu của các quy tắc đơn giản, bạn có thể viết một makefile hoạt động như một trình quét makefile, hoạt động trên một makefile tùy ý:
- Lấy tất cả các tên đích từ makefile bằng cách sử dụng sed.
- `include` the makefile để sử dụng nó để mở rộng các biến.
- Sử dụng `show_% :; echo $$ * `để in tất cả các mục tiêu
Đây sẽ là một tác phẩm ấn tượng. Bạn có chắc mục tiêu đó đáng để nỗ lực không?