.SECONDEXPANSION: #dir/x.foo: #ding=$(@:.foo=.bar) # #%.foo: $$(info got here) /./proc/self/cwd/$$(ding) # echo "Prerequisites: $^" # #%.bar: # echo "We want $@" # $(call save-and-use,/,prereqs) #save-and-use=$(eval $@=$(if $1,$2,$(foreach p,$2,$(dir $@)$p)))$2 pr1=$(info in pr1, $$@ is $@)$(eval $@@gdeps:=$(subst %,$*,$1))$1 pr2=$(info in pr2, $$@ is $@)$(eval $@@gdeps:=$(addprefix $(dir $@),$(subst %,$*,$1)))$1 FORCE: define define-rule $(eval $1: $(if $(findstring /,$1),$$$$(call pr1,$2),$$$$(call pr2,$2)) FORCE $$(info +++ $$$$^ is $$^, gdeps is $$($$@@gdeps)) ) endef $(call define-rule,%.foo,%.bar) x/%.bar: $(info +++ Making $@)