我想创建一个make目标,它在所有嵌套子目录中构建所有匹配文件,其中嵌套目录的数量是未知的。
我希望能够做到这样的事情:
outputfile-%.txt: $(wildcard somedirectory/**/%.xml)
somecommand $< $@
这可能吗?
答案 0 :(得分:0)
将它们全部放入与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 $< $@