我有一个带有单个规则的文件。太短了,将其保存到文件中似乎很可惜:
common_defs.h: resources.txt
./generate_header.sh common_defs.h resources.txt
每当resource.txt比common_defs.h更新时,我只想运行generate_header.sh脚本。
如果我能通过命令行通过此规则,那就太好了。也许使用make太过分了。有更好的解决方案吗?
答案 0 :(得分:4)
这应该做到。
[ resources.txt -nt common_defs.h ] && ./generate_header.sh common_defs.h resources.txt
-nt
是test
实用工具的bash扩展,用于比较两个文件的修改时间。手册页中对此进行了说明。
file1 -nt file2
如果文件1比文件2更新(根据修改日期),或者文件1存在并且文件2确实存在,则为真 不是。
答案 1 :(得分:4)
是的,您可以使用-f -
通过命令行传递规则,以符合无所不在的Unix惯例。
我之前将make目标包装在shell脚本中,但是出于不同的目的-即将目标添加到现有的makefile中。但是,也许这样的事情可能对您有用,您可以将其嵌入到Shell脚本中
make -f - common_defs.h <<TARGET
common_defs.h: resources.txt
./generate_header.sh common-defs.h resources.txt
TARGET