【问题标题】:GNU make 3.81: eval function not working?GNU make 3.81:评估函数不起作用?
【发布时间】:2012-11-06 22:23:23
【问题描述】:

我最近从 GNU make 文档中发现了这段引用 eval 函数的示例代码。我真的很喜欢它,但是当我尝试在我的机器上测试它(make 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 $@

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

【问题讨论】:

    标签: makefile eval


    【解决方案1】:

    我认为如果您从 define 行中删除 = 它将起作用:

    define PROGRAM_template
      ...
    endef
    

    我已经用 GNUMake 3.81 对此进行了测试。至于为什么这行得通,而手册中的版本不行,我不知道。

    【讨论】:

    猜你喜欢
    • 2016-10-23
    • 2019-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-24
    • 2015-11-01
    相关资源
    最近更新 更多