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))
难道他们不是相同呢?我如何编写这个函数?
首先,这GNU版本让您使用?第二,你的意思是“不起作用”?怎么了? – MadScientist
在使用'eval'的每一行上,添加与'info'相同的行,而不是'eval'。这将显示eval函数如何扩展。也许有些东西不像预期的那样扩大?我的猜测是一些'$'字符应该加倍定义,因为它们在eval函数中被转义。如果这是你的问题,你会看到与'信息'功能。 – Tim