.SECONDEXPANSION: obfn1:=/./. #obfn=$(obfn1)$(eval obfn1=$(patsubst /.//////%,/.//./%,$(subst /.//////,//./,$(obfn1)/))) #obfn=$(obfn1)$(eval pr$(obfn1)=$1)$(eval cmd$(obfn1)=$2)$(eval obfn1:=$(subst /.//////,//./,$(patsubst /.//////%,/././%,$(obfn1:.=/.)))) obfn=$(obfn1)$(eval pr=$1)$(eval cmd=$2)$(eval obfn1:=$(subst /.//////,//./,$(patsubst /.//////%,/././%,$(obfn1:.=/.)))) digits=0 1 2 3 4 5 6 7 8 9 %yxxx: $(foreach d,$(digits),%$dyxx) %yxx: $(foreach d,$(digits),%$dyx) %yx: $(foreach d,$(digits),%$dy) #%y: $$(call obfn,FORCE,$$$$(info Running $$@ $$$$@)) %y: $$(call obfn,,) /./%: $$(pr) $(cmd) FORCE: