根据make更新target的时机(一)中的总结,对流程图的中每个分支设置适当的实验场景,进行验证。
- 当目标t是伪目标的时候,无论是否存在名为t的文件,规则t都一定执行。
- t 依赖 p,且有匹配 p 的规则, 且 p 是伪目标时,
无条件执行 p,接着执行 t
无论文件p是否存在,无论文件 t 是否比文件 p 新。 - t 依赖 p,且有匹配 p 的规则, 且 p 不是伪目标
有文件 p | 没有文件 p | |
---|---|---|
p 执行 | 比较p和t | t 需要执行 |
p 不执行 | 比较p和t | -(没有文件p,p一定会执行) |
01. 更新 target 的时机
01.1 target 是伪目标或文件 target 不存在,无条件执行 target
[chenx@lcs2 01]$ ls -a
. .. makefile
[chenx@lcs2 01]$ cat makefile
# target 是伪目标或文件 target 不存在,无条件执行 target
t1:
touch t1
t2:
touch t2
.PHONY: t2 clean
clean:
rm -vf t1 t2
[chenx@lcs2 01]$ make t1
touch t1
[chenx@lcs2 01]$ make t1
make: 't1' is up to date.
[chenx@lcs2 01]$ make t2
touch t2