target的状态可归纳如下:
1. 无效态:
a: 过期。
2. 有效态:
a: 最新
b: 更新 (过期target重建成功之后的状态)
显然,处于无效态的target需要重建!成功重建后的状态由“过期“转换为”更新“
如何判断target是否需要重建:
1. 名为target的文件不存在。
2. 名为target的文件非最新。
以上两点,只要满足其中一点,target就需要重建。
特别注意:
当target重建成功(重建成功是指:成功执行了target对应的recipe)后,make
就把target的状态置为“更新”,但不会对此结果做验证(验证是指:1. 名为
target的文件确已存在?2. 名为target的文件确为最新?),之所以不做验证,
是因为,recipe负责重建target的任务,而recipe具体做了哪些动作,make根本
不管,这完全由用户决定,make 只管 recipe有没有成功执行;有时,recipe根
本就不会生成target文件,故,只要成功执行了recipe, make就认为target已经
是”更新“态。当recipe执行失败时,make会把已有的target删除,防止”病态“的
target(时间戳是最新,但实质上是有问题的target,当下次执行make时,因target
已是最新,不会重建,由此而很可能引入莫名其妙的问题)出现。
从target的角度讲,make的作用是维系其处于有效态,而makefile中有那么多的target,
每一个都要make去维系吗?不是的,默认地,make只维系default target的状态。
如何确定哪一个是default target?
makefile中第一个target, 则为default target (暂且这么认为)
阅读(1086) | 评论(0) | 转发(0) |