Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Makefile GNU Make:在stem中通配符文件';静态模式规则中的s目录_Makefile_Gnu Make_Dita - Fatal编程技术网

Makefile GNU Make:在stem中通配符文件';静态模式规则中的s目录

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

搜索了很多,希望我没有错过一些明显的

我有多个图书目录。每个都有一个单独的*.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...
以下静态模式规则将在*.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"