对于Makefile的clean命令,如果写成下面方式是可能有问题:
从Makefile学习 -6 原理中我们知道,Makefile通过比较依赖文件是否比目标文件新,来决定语句是否编译。
但是对于clean:的方式,只有目标clean,没有依赖。假如在当前路径下正好有一个clean的文件,则把该clean文件认定为目标文件,但是没有依赖,则不执行rm -rf *.o xxx语句。
#Makefile
...
clean:
rm -rf *.o xxx
.PHONE用于不判断目标文件是否比依赖文件新,强制执行命令的作用。这样make clean,就必然会执行rm -rf *.o xxx语句
#Makefile
...
.PHONE:clean
clean:
rm -rf *.o xxx