我想定义一些类似的规则,所以我决定尝试在函数内部定义它们:
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) $< > $@
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))
但是,规则中的 $< 和 $@ 变量评估为空字符串,可能是因为它们是由运行它们的函数定义的,而不是在评估规则之前保存。
我很好奇这个问题的答案,同时也进入了这个问题的其他合理解决方案(除了重组目录结构)。