.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: