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?
Erste, die Version von GNU make verwenden Sie? Und zweitens, was meinst du mit "funktioniert nicht"? Was geschieht? – MadScientist
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