我的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>
答案 0 :(得分:48)
此:
filename.jar: $(wildcard res/**/*)
似乎有效,至少在某些平台上。
修改
或者更好,只是切结:
filename.jar: $(shell find res -type f)