GNU cria com muitos diretórios de destino

Tenho que integrar a geração de muitos arquivos HTML em um @ existenMakefile. O problema é que os arquivos HTML precisam residir em muitos diretórios diferentes. Minha idéia é escrever uma regra implícita que converta o arquivo de origem (* .st) no arquivo html correspondente

%.html: %.st
    $(HPC) -o $@ 
%.html: %.st
    $(HPC) -o $@ $<
lt;

e uma regra que depende de todos os arquivos html

all: $(html)

Se o arquivo HTML não estiver no builddirmake não encontra a regra implícita:*** No rule to make target. Se eu mudar a regra implícita como assim

$(rootdir)/build/doc/2009/06/01/%.html: %.st  
    $(HPC) -o $@ 
$(rootdir)/build/doc/2009/06/01/%.html: %.st  
    $(HPC) -o $@ $<
lt;

foi encontrado, mas preciso ter uma regra implícita para quase todos os arquivos do projeto. De acordo com Algoritmo de pesquisa de regras implícitas no GNUmake manual, a pesquisa de regras funciona assim:

Divida t em uma parte do diretório, chamada de d, e o restante, chamado n. Por exemplo, se t forsrc/foo.o', then d is src / 'e n é `foo.o'.Faça uma lista de todas as regras de padrão em que um dos alvos corresponde a t ou n. Se o padrão de destino contiver uma barra, será comparada com t; caso contrário, contra n.

Por que a regra implícita não foi encontrada e qual seria a solução mais elegante, assumindo o GNUmake é usado

Aqui está uma versão simplificada do meuMakefile:

rootdir  = /home/user/project/doc
HPC      = /usr/local/bin/hpc

html = $(rootdir)/build/doc/2009/06/01/some.html

%.html: %.st
    $(HPC) -o $@ 
rootdir  = /home/user/project/doc
HPC      = /usr/local/bin/hpc

html = $(rootdir)/build/doc/2009/06/01/some.html

%.html: %.st
    $(HPC) -o $@ $<

#This works, but requires a rule for every output dir
#$(rootdir)/build/doc/2009/06/01/%.html: %.st  
#   $(HPC) -o $@ $<

.PHONY: all
all: $(html)
lt; #This works, but requires a rule for every output dir #$(rootdir)/build/doc/2009/06/01/%.html: %.st # $(HPC) -o $@
rootdir  = /home/user/project/doc
HPC      = /usr/local/bin/hpc

html = $(rootdir)/build/doc/2009/06/01/some.html

%.html: %.st
    $(HPC) -o $@ $<

#This works, but requires a rule for every output dir
#$(rootdir)/build/doc/2009/06/01/%.html: %.st  
#   $(HPC) -o $@ $<

.PHONY: all
all: $(html)
lt; .PHONY: all all: $(html)

questionAnswers(8)

yourAnswerToTheQuestion