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

2019-07-18 03:03发布

在我的Makefile中一个规则的拉链整个目录( res/ )到一个ZIP文件。 显然,这种规则需要根据执行时的任何文件res/目录的变化。 因此,我希望规则有一个先决条件,即目录下的所有文件。 我怎样才能实现这个规则?

在bash 与globstar启用选项 ,您可以使用通配符模式获得该目录中的所有文件的列表res/**/* 。 然而,这似乎并没有,如果你将它指定为在Makefile的前提工作:

filename.jar: res/**/*

即使在touch荷兰国际集团在文件res/ ,使仍报告

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

所以显然这是不承认的格局。

如果我宣布了目录本身作为一个先决条件:

filename.jar: res

然后让不会重新执行,当一个文件被修改(我觉得make只着眼于目录本身,仅当直接孩子添加,删除或重命名改变的修改的日期)。

Answer 1:

这个:

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

似乎工作,至少在某些平台上。

编辑:

或者更好的,刚切结:

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


文章来源: Makefile rule that depends on all files under a directory (including within subdirectories)