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:
src/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)