GNU crea con muchos directorios de destino
engo que integrar la generación de muchos archivos HTML en una @ existenMakefile
. El problema es que los archivos HTML deben residir en muchos directorios diferentes. Mi idea es escribir una regla implícita que convierta el archivo fuente (* .st) en el archivo html correspondiente
%.html: %.st
$(HPC) -o $@ %.html: %.st
$(HPC) -o $@ $<
lt;
y una regla que depende de todos los archivos html
all: $(html)
Si el archivo HTML no está en el builddirmake
no encuentra la regla implícita:*** No rule to make target
. Si cambio la regla implícita así,
$(rootdir)/build/doc/2009/06/01/%.html: %.st
$(HPC) -o $@ $(rootdir)/build/doc/2009/06/01/%.html: %.st
$(HPC) -o $@ $<
lt;
se encuentra, pero luego tengo que tener una regla implícita para casi todos los archivos del proyecto. De acuerdo a Algoritmo de búsqueda de reglas implícitas en el GNUmake
manual, la búsqueda de reglas funciona así:
src/foo.o', then d is
src / 'yn es `foo.o'.Haga una lista de todas las reglas de patrón, uno de cuyos objetivos coincida con t o n. Si el patrón de destino contiene una barra inclinada, se compara con t; de lo contrario, contra n.Por qué no se encuentra la regla implícita y cuál sería la solución más elegante, suponiendo GNUmake
se usa @
Aquí hay una versión reducida de miMakefile
:
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)