make prerequisite: 根据文件状态自动确定是否重新执行

Basic

先看一个简单的例子(引自Makefile Tutorial By Example):当我们对同一个makefile执行两次make命令时,由于第一次运行已经生成了目标文件blah,第二次make会直接输出'blah' is up to date,而不会重新compile,这时即使我们修改blah.c,依然是同样的情况。在不使用make clean的情况下想要做到根据blah.c文件的情况自动判断是否需要重新执行make,可以将blah.c作为blah的prerequisite,这样在运行make command时,make会自动判断是否需要真正执行。开始执行的条件有两个:

1.首次运行,即blah并不存在。 

 2. 当prerequisite的修改时间比已经存在的blah更新时,make将会重新执行;否则,make将输出'blah' is up to date,并跳过本次执行。

Advanced Topic

当项目结构较为复杂时,合理的makefile依赖组织能够大大节约时间。仍然以Makefile Tutorial By Example中的sample进行说明,假定我们的C project main.cpp需要先执行one.cpp,再执行two.cpp,最后main.cpp依赖one与two的输出结果,那么依照下图中的依赖关系编写makefile,便能流畅的实现部分reuse:当只有one相关的部分修改,且two的结果已经存在时,只执行one, main。

最后推荐一个能够将makefile的依赖变成图片的工具,来自SO:make - Visualizing dependencies coded up in makefiles as a graph - Unix & Linux Stack Exchangej

使用方法贴在这面的有人打不开link。

 

  • Installation (make sure graphviz is installed, e.g. with sudo apt install graphviz on Debian systems)
cd /my/install/dir
git clone https://github.com/lindenb/makefile2graph
cd makefile2graph
make
  • Generate PNG (no need to use dedicated variable GDIR if you add makefile2graph's path to your PATH variable)
cd /path/to/my/makefile
GDIR=/my/install/dir/makefile2graph
make -Bnd |  ${GDIR}/make2graph | dot -Tpng -o my_graph.png

生成的图片大概这样:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值