2016-07-04 13 views
0

Ich bin nicht Makefiles. Ich habe RTFM und schaute auf SO, aber ich verstehe immer noch nicht, was ich in diesem einfachen Beispiel falsch mache.Was ist mit dieser Makefile-Funktion falsch?

Diese Werke:

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),)) 

Diese nicht funktioniert:

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)) 

Sind sie nicht gleichwertig? Wie schreibe ich diese Funktion?

+2

Erste, die Version von GNU make verwenden Sie? Und zweitens, was meinst du mit "funktioniert nicht"? Was geschieht? – MadScientist

+0

Fügen Sie in jeder Zeile, in der Sie 'eval' verwenden, die exakt gleiche Zeile mit 'info' statt 'eval' hinzu. Dies zeigt genau an, wie sich die Eval-Funktion ausdehnt. Vielleicht expandiert etwas nicht wie erwartet? Meine Vermutung ist, dass einige $ -Zeichen in die Definition verdoppelt werden sollten, da sie in der Eval-Funktion maskiert sind. Wenn dies Ihr Problem ist, werden Sie es mit der Info-Funktion sehen. – Tim

Antwort

0

Sie haben uns nicht genügend Informationen gegeben, um den Fehler zu reproduzieren (und ich glaube wirklich nicht, dass Ihr Beispiel minimal ist), aber ich werde auf ein Bein gehen. Ändern Sie dies:

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 

dazu:

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

Das Glied fast gehalten - ich nahm die Zeile SOURCES = $ (APP_SOURCES) $ (2), und nur diesen Wert in der Parameterliste verwendet - dann hat diese Lösung funktioniert! – dwn

Verwandte Themen