Makefile GNU Make:在stem中通配符文件';静态模式规则中的s目录
搜索了很多,希望我没有错过一些明显的 我有多个图书目录。每个都有一个单独的*.ditamap文件(总是以本书命名),其中引用了几十个附带的*.dita主题文件:Makefile GNU Make:在stem中通配符文件';静态模式规则中的s目录,makefile,gnu-make,dita,Makefile,Gnu Make,Dita,搜索了很多,希望我没有错过一些明显的 我有多个图书目录。每个都有一个单独的*.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
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...
以下静态模式规则将在*.ditamap文件已更改的任何图书目录中重建XHTML目录:
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"
但这完全不起作用,因为在静态模式规则中不支持通配符。不知何故,我需要在每个目标的stem目录中收集通配符文件,然后将它们作为该书的先决条件。,可能:
。第二次扩展:
$(xhtml\u文件):%\uxhtml/index.html:%.ditamap$$(通配符$$(dir$$*)/*.dita)
DITA- I:“是的,这是有效的,谢谢!我确实考虑了DITA文件的删除方面。幸运的是,*.DITA文件在不修改引用文件的情况下不会消失。如果引用文件也消失了,那么这会重复直到顶层*.DITAMAP文件被修改(或者完全删除这本书)!)。稍微简化一下,您可以将$$(dir$$*)
替换为$$(*D)
。
${xhtml_files}: %_xhtml/index.html: %.ditamap $(wildcard $(dir %)/*.dita)
# ^^^^^^^^^^^^^^^^^^^^^^^^^^^
dita -i "${<}" -f xhtml -o "${*}_xhtml" 2>&1 | tee "${*}_xhtml.out"
.SECONDEXPANSION:
$(xhtml_files): %_xhtml/index.html: %.ditamap $$(wildcard $$(dir $$*)/*.dita)
dita -i "$<" -f xhtml -o "$*_xhtml"