我要定義一些類似的規則,所以我決定嘗試將它們定義一個函數內部:定義規則
COMPILED_JS_FILES=$(COMPILED_JS_FILES) $(foreach m,$(notdir $(wildcard src/$(1)/*.$(2))),$(TARGET_DIR)/$(1)/$(m))
$(TARGET_DIR)/$(1)/%.$(2) : src/$(1)/%.$(2)
$(CAT) $< > [email protected]
endef
$(eval $(call COMPILE_JS,modules,js))
$(eval $(call COMPILE_JS,modules,jsm))
$(eval $(call COMPILE_JS,models,js))
$(eval $(call COMPILE_JS,firefox,js))
$(eval $(call COMPILE_JS,helpers,js))
然而,$ <和$ @規則內部變量計算空字符串,大概是因爲它們是由運行它們的函數定義的,而不是在規則被評估之前被保存。
我很好奇這個問題的答案,但也解決了這個問題的其他合理的解決方案(除了重構目錄結構)。
我挖掘.SECONDEXPANSION目標 - 你知道我發現的解決方案(double-$)是否適用於不同的make實現,或者它碰巧在我正在使用的解決方案中工作? – Daniel
不幸的是,我十多年來一直沒有使用非GNU製造。我不知道,但你的解決方案看起來很合理。 – thb