传递命令行规则以进行

时间:2019-12-04 14:56:53

标签: bash makefile

我有一个带有单个规则的文件。太短了,将其保存到文件中似乎很可惜:

common_defs.h: resources.txt
    ./generate_header.sh common_defs.h resources.txt

每当resource.txt比common_defs.h更新时,我只想运行generate_header.sh脚本。
如果我能通过命令行通过此规则,那就太好了。也许使用make太过分了。有更好的解决方案吗?

2 个答案:

答案 0 :(得分:4)

这应该做到。

[ resources.txt -nt common_defs.h ] && ./generate_header.sh common_defs.h resources.txt

-nttest实用工具的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