Искал кучу, надеюсь, я не пропустил что-то очевидное ...
У меня есть несколько книжных каталогов. Каждый из них имеет один файл * .ditamap (всегда именуемый для книги), в котором содержится несколько десятков сопровождающих файлов темы * .dita:
makefile
book1/
book1.ditamap intro.dita topic1.dita topic2.dita glossary.dita
book2/
book2.ditamap about.dita topicA.dita topicB.dita appendix.dita
book3/
book3.ditamap cmd1.dita cmd2.dita cmd3.dita
Вывод XHTML (цель) для книги зависит от ее отдельного файла .ditamap плюс всех файлов * .dita в этом каталоге книги (предварительные условия). Makefile находится рядом с каталогами книг.
Сборка XHTML для книги создает выходной каталог XHTML внутри этого каталога книги с файлом index.html, который я использую в качестве цели:
book1/
book1.ditamap intro.dita topic1.dita topic2.dita glossary.dita
book1/book1_xhtml/
index.html ...more html and CSS files...
Следующее правило статического шаблона перестроит каталог XHTML внутри любого каталога книг, в котором был изменен файл * .ditamap:
ditamap_files := $(wildcard */*.ditamap)
xhtml_files := $(patsubst %.ditamap,%_xhtml/index.html,${ditamap_files})
all: dita xhtml
dita: ${ditamap_files}
xhtml: ${xhtml_files}
${xhtml_files}: %_xhtml/index.html: %.ditamap
dita -i "${<}" -f xhtml -o "${*}_xhtml"
(Примечание: make
прекрасно обрабатывает создание пути к цели index.html благодаря своим умным правилам обработки каталогов!)
Однако я не нашел способа расширить это правило, чтобы оно чувствительно к файлам * .dita. Всякий раз, когда .ditamap или .dita изменяется внутри каталога книги, XHTML-файл книги необходимо перестраивать.
Я пробовал что-то вроде
${xhtml_files}: %_xhtml/index.html: %.ditamap $(wildcard $(dir %)/*.dita)
# ^^^^^^^^^^^^^^^^^^^^^^^^^^^
dita -i "${<}" -f xhtml -o "${*}_xhtml" 2>&1 | tee "${*}_xhtml.out"
но это полностью не работает, потому что подстановочные знаки не поддерживаются в статических шаблонных правилах. Каким-то образом мне нужно собрать файлы с подстановочными символами в каталоге основы каждой цели, а затем сделать их необходимыми для этой книги.