多个子目录中包含文件的Makefile依赖项

多个子目录中包含文件的Makefile依赖项,makefile,docbook,Makefile,Docbook,我正在与docbook合作,并希望使用GNU Make进行构建。在我的顶层子目录中,我有两个目录doc和html,在顶层目录中有stylesheet.xsl。在doc中,有一个docbook文件和一个文件夹,其中包含该docbook的xincludes(例如article1.docbook和一个名为article1的目录,其中包含article1.docbook中的所有xincludes)。像这样: toplevel | |---doc | |-article1.docbook |

我正在与docbook合作,并希望使用GNU Make进行构建。在我的顶层子目录中,我有两个目录
doc
html
,在顶层目录中有
stylesheet.xsl
。在
doc
中,有一个docbook文件和一个文件夹,其中包含该docbook的xincludes(例如article1.docbook和一个名为article1的目录,其中包含article1.docbook中的所有xincludes)。像这样:

toplevel
|
|---doc
|    |-article1.docbook
|    |---article1
|    |    |
|    |    |---sect1.docbook
|    |    |---sect2.docbook
|    |
|    |-article2.docbook
|    |---article2
|    etc...
|
|---html
|    |
|    |---article1.html
|    |---article2.html
|
|---stylesheet.xsl
我想出了这个制作文件。它根据需要生成html,但不知道子目录中的依赖项(例如,如果正在生成article1.docbook,则为sect1.docbook,即使article1.docbook尚未修改):

XSL_HTML=stylesheet.XSL
HTML\u OUT=HTML
DOCBOOK=$(通配符doc/*.DOCBOOK)
HTML=$(patsubst doc/%.docbook、%.HTML、$(docbook))
全部:$(addprefix html/,$(html))
html/%.html:doc/%.docbook
xsltproc--xinclude\
--stringparam root.filename“”\
--输出$@$(XSL_HTML)$<

因此,我需要添加一个类似于
$(通配符doc/%/*.docbook)
的依赖项,这就是我遇到的问题。

您的Make版本有二次扩展吗?我相信有;我正在使用Cygwin的GNU Make。这可能会起作用(我手头只有旧版本,所以无法测试):在
.SECONDEXPANSION:
之后,使用
$$(通配符doc/$$*/*.docbook)
,它本身似乎不起作用,但我不太了解secondary expansion,所以我会仔细研究一下。还有链接。。。
XSL_HTML = stylesheet.xsl
HTML_OUT = html
DOCBOOK = $(wildcard doc/*.docbook)
HTML = $(patsubst doc/%.docbook,%.html,$(DOCBOOK))

all: $(addprefix html/, $(HTML))

html/%.html : doc/%.docbook
    xsltproc --xinclude \
        --stringparam root.filename '' \
        --output $@ $(XSL_HTML) $<