GNU make 3.81:eval函数不起作用?

时间:2012-11-06 22:23:24

标签: makefile eval

我最近在GNU make文档中找到了这段代码,它引用了eval函数。我真的很喜欢它,但是当我尝试在我的机器上测试它(make 3.81 / Debian)时,它所做的只是尝试链接服务器而不首先编译c文件...为什么? make 3.81不兼容吗?

Shell输出:

$ 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 $@

 clean:
         rm -f $(ALL_OBJS) $(PROGRAMS)

1 个答案:

答案 0 :(得分:19)

如果您从=行中删除define,我认为它会有效:

define PROGRAM_template
  ...
endef

我用GNUMake 3.81对此进行了测试。至于为什么这是有效的,手册中的版本没有,我不知道。