2016-07-04 96 views
0

我不擅长makefiles。我有RTFM并且看起来如此,但在这个简单的例子中,我仍然不明白我做错了什么。这个makefile函数有什么问题?

作品

TARGET = nim 
    ifeq ($(CONFIG),Release) 
     $(eval $(call LINK_RULE,$(TARGET)_unstripped,$(APP_SOURCES) Neonim.cc,$(LIBS),$(DEPS))) 
     $(eval $(call STRIP_RULE,$(TARGET),$(TARGET)_unstripped)) 
    else 
     $(eval $(call LINK_RULE,$(TARGET),$(APP_SOURCES) Neonim.cc,$(LIBS),$(DEPS))) 
    endif 
    $(eval $(call NMF_RULE,$(TARGET),)) 

    TARGET = ttt 
    ifeq ($(CONFIG),Release) 
     $(eval $(call LINK_RULE,$(TARGET)_unstripped,$(APP_SOURCES) TTToe3D.cc,$(LIBS),$(DEPS))) 
     $(eval $(call STRIP_RULE,$(TARGET),$(TARGET)_unstripped)) 
    else 
     $(eval $(call LINK_RULE,$(TARGET),$(APP_SOURCES) TTToe3D.cc,$(LIBS),$(DEPS))) 
    endif 
    $(eval $(call NMF_RULE,$(TARGET),)) 

不起作用

define bld = 
     SOURCES = $(APP_SOURCES) $(2) 
     ifeq ($(CONFIG),Release) 
     $(eval $(call LINK_RULE,$(1)_unstripped,$(SOURCES),$(LIBS),$(DEPS))) 
     $(eval $(call STRIP_RULE,$(1),$(1)_unstripped)) 
     else 
     $(eval $(call LINK_RULE,$(1),$(SOURCES),$(LIBS),$(DEPS))) 
     endif 
     $(eval $(call NMF_RULE,$(1),)) 
    endef 
    $(eval $(call bld,nim,Neonim.cc)) 
    $(eval $(call bld,ttt,TTToe3D.cc)) 

难道他们不是相同呢?我如何编写这个函数?

+2

首先,这GNU版本让您使用?第二,你的意思是“不起作用”?怎么了? – MadScientist

+0

在使用'eval'的每一行上,添加与'info'相同的行,而不是'eval'。这将显示eval函数如何扩展。也许有些东西不像预期的那样扩大?我的猜测是一些'$'字符应该加倍定义,因为它们在eval函数中被转义。如果这是你的问题,你会看到与'信息'功能。 – Tim

回答

0

你没有给我们足够的信息来重现错误(我真的不认为你的例子是minimal),但我会出去走一走。更改此:

define bld = 
    SOURCES = $(APP_SOURCES) $(2) 
    ifeq ($(CONFIG),Release) 
    $(eval $(call LINK_RULE,$(1)_unstripped,$(SOURCES),$(LIBS),$(DEPS))) 
    $(eval $(call STRIP_RULE,$(1),$(1)_unstripped)) 
    else 
    $(eval $(call LINK_RULE,$(1),$(SOURCES),$(LIBS),$(DEPS))) 
    endif 
    $(eval $(call NMF_RULE,$(1),)) 
endef 

这样:

define bld 
    SOURCES = $(APP_SOURCES) $(2) 
    ifeq ($(CONFIG),Release) 
    $(call LINK_RULE,$(1)_unstripped,$(SOURCES),$(LIBS),$(DEPS)) 
    $(call STRIP_RULE,$(1),$(1)_unstripped) 
    else 
    $(call LINK_RULE,$(1),$(SOURCES),$(LIBS),$(DEPS)) 
    endif 
    $(call NMF_RULE,$(1),) 
endef 
+0

肢体几乎保持 - 我拿出线SOURCES = $(APP_SOURCES)$(2),并在参数列表中使用该值 - 然后此解决方案工作! – dwn