Я должен интегрировать генерацию многих HTML-файлов в существующий Makefile
.
Проблема заключается в том, что файлы HTML должны находиться во многих разных каталогах.
Моя идея состоит в том, чтобы написать неявное правило, которое преобразует исходный файл (* .st) в соответствующий HTML-файл
%.html: %.st
$(HPC) -o $@ $<
и правило, которое зависит от всех HTML-файлов
all: $(html)
Если файл HTML отсутствует в builddir, make
не находит неявное правило: *** No rule to make target
.
Если я изменю неявное правило следующим образом
$(rootdir)/build/doc/2009/06/01/%.html: %.st
$(HPC) -o $@ $<
это найдено, но тогда я должен иметь неявное правило почти для каждого файла в проекте.
Согласно Алгоритму поиска неявных правил в руководстве по GNU make
, поиск правил работает следующим образом:
- Разделите t на часть каталога с именем d, а остальные с именем n. За
Например, если t равно
src/foo.o', then d
is
src / ', а n равно `foo.o'.
- Составьте список всех шаблонных правил, одно из целей которых соответствует t или n.
Если целевой шаблон содержит
косая черта, это сопоставлено с т;
в противном случае против п.
Почему неявное правило не найдено, и какое было бы самое элегантное решение, если использовать GNU make
?
Вот урезанная версия моего Makefile
:
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)