Makefile 如何为未知数量的子目录创建make目标?

Makefile 如何为未知数量的子目录创建make目标?,makefile,Makefile,我想创建一个make目标,它在嵌套目录数量未知的所有嵌套子目录中构建所有匹配的文件 我希望能够做到以下几点: outputfile-%.txt: $(wildcard somedirectory/**/%.xml) somecommand $< $@ outputfile-%.txt:$(通配符somedirectory/**/%.xml) somecommand$$@ outputfile-%.txt: somecommand$

我想创建一个make目标,它在嵌套目录数量未知的所有嵌套子目录中构建所有匹配的文件

我希望能够做到以下几点:

outputfile-%.txt: $(wildcard somedirectory/**/%.xml)
    somecommand $< $@
outputfile-%.txt:$(通配符somedirectory/**/%.xml)
somecommand$<$@

这可能吗?

将它们全部放在make所在的同一目录中是很棘手的。还要注意的是,如果有两个不同的目录包含相同的.xml文件名,则会丢失

不过,像这样的东西会管用的。还有其他方法可以做到这一点,它们不包括
include
,但要求您拥有更新的GNU品牌。注意:当涉及到目录时间戳时,这依赖于标准POSIX行为:如果您想在非基于POSIX的系统(例如Windows)上执行此操作,则必须执行稍微不同/效率较低的操作:

(很抱歉,原始版本有点损坏:试试这个):

-include rules.mk
全部:$(所有输出)
目录:=$(shell查找-键入d somedirectory)
rules.mk:$(目录)
@以$(目录)表示的d;做\
对于“$$d”/*.xml中的f;做\
echo“outputfile-$${f##*/}.txt:$$f”\
echo“ALL_OUTPUTS+=outputfile-$${f##*/}.txt”\
完成\
完成>$@
outputfile-%.txt:
somecommand$<$@

txt
文件应该放在
xml
所在的目录中,还是放在Make执行的目录中?@Beta它应该放在Make执行的目录中。
-include rules.mk

all: $(ALL_OUTPUTS)

DIRECTORIES := $(shell find -type d somedirectory)
rules.mk: $(DIRECTORIES)
    @for d in $(DIRECTORIES); do \
        for f in "$$d"/*.xml; do \
            echo "outputfile-$${f##*/}.txt: $$f"; \
            echo "ALL_OUTPUTS += outputfile-$${f##*/}.txt"; \
        done; \
     done > $@

outputfile-%.txt:
    somecommand $< $@