Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
依赖于目录下(包括子目录内)所有文件的Makefile规则_Makefile_Wildcard_Gnu Make_Glob - Fatal编程技术网

依赖于目录下(包括子目录内)所有文件的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

我的Makefile中有一条规则将整个目录(
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')
似乎适用于可能重复的