噢,我想我終於明白你的問題有。如果你會顯示不正確的行爲並描述它不是你想要的,這將是非常有幫助的。
無論如何。問題是你正在使用遞歸變量DEPENDS
。在實際使用變量之前,遞歸變量的右側不會擴展。所以,當你寫:
dir=one
CLEAN_FILES+=$(dir)/*.o
include $(dir)/Rules.mk
DEPENDS +=$(OBJS_$(dir))
dir=two
CLEAN_FILES+=$(dir)/*.o
include $(dir)/Rules.mk
DEPENDS +=$(OBJS_$(dir))
後這取決於都會有這樣的文字值:$(OBJS_$(dir)) $(OBJS_$(dir))
。該價值直到後期纔會擴大。當它被擴展時,dir
將是最後一個值,並且您將獲得同一個變量的多個副本。
你需要使用一個簡單擴展型變量,而不是一個遞歸變量。要做到這一點與追加,首先初始化變量爲簡單,然後追加將保持:
# Make sure DEPENDS is simply expanded
DEPENDS :=
dir=one
CLEAN_FILES+=$(dir)/*.o
include $(dir)/Rules.mk
DEPENDS +=$(OBJS_$(dir))
dir=two
CLEAN_FILES+=$(dir)/*.o
include $(dir)/Rules.mk
DEPENDS +=$(OBJS_$(dir))
這將做你想做的。
要做到這一點在一個循環,因爲這是生成文件命令不是shell命令,你將不得不使用eval
這絕對是高級用法。
像這樣的事情會做到這一點,但:
DIRS = one two three four
# Make sure DEPENDS is simply expanded
DEPENDS :=
# Define a user-defined macro to include Rules.mk and set DEPENDS
define ADD_DEPENDS
CLEAN_FILES += $1/*.o
include $1/Rules.mk
DEPENDS += $$(OBJS_$1)
endef
# Run it!
$(foreach D,$(DIRS),$(eval $(call ADD_DEPENDS,$D)))
我不知道這個問題是問。請更改它和/或提供更多細節。 – MadScientist
更新問題 – mSO
那麼,你爲什麼不只是寫'$(OBJS _ $(DIR))'?這怎麼辦並不像預期的那樣? – MadScientist