在我的Makefile中有一条规则,它将整个目录(res/
)压缩成一个ZIP文件。显然,当 res/
目录下的任何文件发生更改时,此规则需要执行。因此,我希望这个规则的前提条件是该目录下的所有文件。如何实现这个规则?
在启用了 Bash 的 globstar
选项 后,您可以使用通配符模式 res/**/*
获取该目录中所有文件的列表。但是,如果将其指定为 Makefile 中的先决条件,则似乎不起作用:
filename.jar: res/**/*
即使在
res/
中触摸文件后,Make仍然会报告。make: `filename.jar' is up to date.
很明显它没有识别出这个模式。
如果我将目录本身声明为先决条件:
filename.jar: res
如果文件被修改,make
不会重新执行(我认为 make
只检查目录本身的修改日期,当直接子级被添加、删除或重命名时才会更改)。