依赖于目录下(包括子目录内)所有文件的Makefile规则
我的Makefile中有一条规则将整个目录(依赖于目录下(包括子目录内)所有文件的Makefile规则,makefile,wildcard,gnu-make,glob,Makefile,Wildcard,Gnu Make,Glob,我的Makefile中有一条规则将整个目录(res/)压缩成一个ZIP文件。显然,当res/目录下的任何文件发生更改时,需要执行此规则。因此,我希望规则将该目录下的所有文件作为先决条件。我如何实施这条规则 在Bash中,可以使用通配符模式res/***获取该目录中所有文件的列表。但是,如果在Makefile中将其指定为先决条件,则它似乎不起作用: filename.jar: res/**/* 即使在触摸在res/中编辑文件后,也要制作静止报告 make: `filename.jar' is u
res/
)压缩成一个ZIP文件。显然,当res/
目录下的任何文件发生更改时,需要执行此规则。因此,我希望规则将该目录下的所有文件作为先决条件。我如何实施这条规则
在Bash中,可以使用通配符模式res/***
获取该目录中所有文件的列表。但是,如果在Makefile中将其指定为先决条件,则它似乎不起作用:
filename.jar: res/**/*
即使在触摸在res/
中编辑文件后,也要制作静止报告
make: `filename.jar' is up to date.
因此,很明显,它没有认识到这种模式
如果我将目录本身声明为先决条件:
filename.jar: res
当文件被修改时,Make将不会重新执行(我认为Make
只查看目录本身的修改日期,它只在添加、删除或重命名直接子目录时才会更改)。
filename.jar: $(wildcard res/**/*)
至少在某些平台上似乎是有效的
编辑:
或者更好的办法是剪掉这个结:
filename.jar: $(shell find res -type f)
wildcard
建议对我不起作用,但是find
确实起作用。(我只是使用了$(shell find res)
,以便在文件被删除时触发它。)警告:如果在制作jar之后删除了一个输入文件,make不会注意到。为了能够检测文件删除,您可以将该列表存储在一个文件中,类似于@Beta:这样如何:开发者a从res
目录中删除一个他们认为未使用的文件,运行make
,测试jar文件,提交。开发人员B对代码进行干净的签出,运行make
,得到一个损坏的版本。@slowdog:删除文件时,res
目录的修改日期也将更改。添加res
目录本身的依赖性可以解决这个问题。只需从find
命令中删除-type f
。要允许使用空格filename.jar:$(shell find res-type f|sed's//\\\/g')
似乎适用于可能重复的