我想创建一个 make 目标,它在所有嵌套目录的数量未知的嵌套子目录中构建所有匹配的文件。
我希望能够做类似的事情:
outputfile-%.txt: $(wildcard somedirectory/**/%.xml)
somecommand $< $@
这可能吗?
我想创建一个 make 目标,它在所有嵌套目录的数量未知的嵌套子目录中构建所有匹配的文件。
我希望能够做类似的事情:
outputfile-%.txt: $(wildcard somedirectory/**/%.xml)
somecommand $< $@
这可能吗?
将它们全部放入与 make 相同的目录中很棘手。另请注意,如果您曾经有两个不同的目录包含相同的 .xml 文件名,您将失败。
像这样的东西会起作用。还有其他方法可以做到这一点,不涉及 . include
,但要求您拥有更新的 GNU make。请注意,当涉及到目录时间戳时,这依赖于标准 POSIX 行为:如果您想在非基于 POSIX 的系统(例如 Windows)上执行此操作,则必须做一些稍微不同/效率较低的事情:
(对不起,原来的有点破:试试这个):
-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 $< $@