0

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

我希望能够做类似的事情:

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

这可能吗?

4

1 回答 1

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 $< $@
于 2013-05-22T19:32:42.233 回答