55

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

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

filename.jar: res/**/*

即使在touching 中输入文件后res/,Make 仍然会报告

make: `filename.jar' is up to date.

很明显,它没有识别出这种模式。

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

filename.jar: res

那么 Make 在文件被修改时不会重新执行(我认为make只查看目录本身的修改日期,只有在添加、删除或重命名直接子项时才会更改)。

4

1 回答 1

68

这:

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

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

编辑:

或者更好的是,打个结:

filename.jar: $(shell find res -type f)
于 2013-01-12T03:20:11.197 回答