Недавно я нашел этот фрагмент кода примера из документации GNU, которая ссылается на функцию eval. Мне это очень нравится, но когда я попытался проверить его на своей машине (сделайте 3.81/Debian), все, что он делает, пытается связать сервер без компиляции файлов c сначала... почему? Является ли make 3,81 несовместимым?
Выход оболочки:
$ make
cc -o server
cc: no input files
код:
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)