Mec*_*ail 36 glob makefile wildcard gnu-make
我的Makefile中的一条规则将整个目录(res/)压缩为ZIP文件.显然,当目录下的任何文件res/发生更改时,需要执行此规则.因此,我希望规则将该目录下的所有文件作为先决条件.我该如何实施这条规则?
在启用了globstar选项的 Bash中,您可以使用通配符模式获取该目录中所有文件的列表res/**/*.但是,如果将其指定为Makefile中的先决条件,它似乎不起作用:
filename.jar: res/**/*
Run Code Online (Sandbox Code Playgroud)
即使在touch输入文件后res/,仍然可以生成报告
make: `filename.jar' is up to date.
Run Code Online (Sandbox Code Playgroud)
很明显它没有认识到这种模式.
如果我将目录本身声明为先决条件:
filename.jar: res
Run Code Online (Sandbox Code Playgroud)
然后在修改文件时不会重新执行Make(我认为make只查看目录本身的修改日期,只有在添加,删除或重命名直接子项时才会更改).
Bet*_*eta 52
这个:
filename.jar: $(wildcard res/**/*)
Run Code Online (Sandbox Code Playgroud)
似乎工作,至少在某些平台上.
编辑:
或者更好,只是切结:
filename.jar: $(shell find res -type f)
Run Code Online (Sandbox Code Playgroud)