.SECONDEXPANSION: obfn1=/./. #obfn=$(obfn1)$(eval obfn1=$(patsubst /.//////%,/.//./%,$(subst /.//////,//./,$(obfn1)/))) define obfn $(obfn1)$(eval pr$(obfn1)=$1 cmd$(obfn1)=$2 obfn1=$(subst /.//////,//./,$(patsubst /.//////%,/././%,$(obfn1:.=/.))) ) endef 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 $$@ $$$$@)) /./%: $$(pr$$@) $(cmd$@) FORCE: