Gần đây tôi đã tìm thấy đoạn mã ví dụ này từ GNU làm tài liệu đề cập đến hàm eval. Tôi thực sự thích nó, nhưng khi tôi thử kiểm tra nó trên máy tính của tôi (tạo 3,81/Debian), tất cả những gì nó làm là cố gắng liên kết máy chủ mà không cần biên dịch các tệp c trước ... tại sao? Làm cho 3.81 không tương thích?GNU tạo 3,81: hàm eval không hoạt động?
Shell đầu ra:
$ make
cc -o server
cc: no input files
Code:
PROGRAMS = server client
server_OBJS = server.o server_priv.o server_access.o
server_LIBS = priv protocol
client_OBJS = client.o client_api.o client_mem.o
client_LIBS = protocol
# Everything after this is generic
.PHONY: all
all: $(PROGRAMS)
define PROGRAM_template =
$(1): $$($(1)_OBJS) $$($(1)_LIBS:%=-l%)
ALL_OBJS += $$($(1)_OBJS)
endef
$(foreach prog,$(PROGRAMS),$(eval $(call PROGRAM_template,$(prog))))
$(PROGRAMS):
$(LINK.o) $^ $(LDLIBS) -o [email protected]
clean:
rm -f $(ALL_OBJS) $(PROGRAMS)
Cảm ơn, điều này đã hiệu quả. Lạ lùng tại sao họ ghi lại nó sai. – user1344105
Vấn đề là '=' là một tính năng được thêm vào trong GNU tạo 3.82 và GNU làm thủ công (bao gồm cả bản sao trên gnu.org, nơi Google sẽ gửi hầu hết mọi người) không đưa ra gợi ý nhỏ nhất khi một tính năng cụ thể đến 3,82. So sánh http://developer.apple.com/library/mac/#documentation/developertools/gnumake/make_3.html#SEC22 (3.81) với http://www.gnu.org/software/make/manual/html_node/Reading -Makefiles.html # Đọc-Makefiles (3.82) – reinierpost
Cảm ơn bạn đã giải thích! – user1344105