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

时间:2013-05-22 17:22:34

标签: makefile

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

我希望能够做到这样的事情:

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

这可能吗?

1 个答案:

答案 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 $< $@