依赖于目录下所有文件的Makefile规则(包括在子目录中)

时间:2013-01-12 02:15:50

标签: makefile wildcard gnu-make glob

我的Makefile中的一条规则将整个目录(res/)压缩为ZIP文件。显然,当res/目录下的任何文件发生变化时,需要执行此规则。因此,我希望规则将该目录下的所有文件作为先决条件。我该如何实施这条规则?

在Bash with the globstar option enabled中,您可以使用通配符模式res/**/*获取该目录中所有文件的列表。但是,如果您将其指定为Makefile中的先决条件,它似乎不起作用:

filename.jar: res/**/*

即使在touch res/make: `filename.jar' is up to date. 文件后,仍然需要报告

filename.jar: res

很明显,它没有认识到这种模式。

如果我将目录本身声明为先决条件:

make

然后在修改文件时Make不会重新执行(我认为{{1}}只查看目录本身的修改日期,只有在添加,删除或重命名直接子项时才会更改。< / p>

1 个答案:

答案 0 :(得分:48)

此:

filename.jar: $(wildcard res/**/*)

似乎有效,至少在某些平台上。

修改

或者更好,只是切结:

filename.jar: $(shell find res -type f)