Makefile中.PHONY的作用

一、引入

编写一个Makfile,规则名称为clean,其命令rm不产生clean文件:

clean:
    rm -f *.o 

如果该Makfile文件所在目录不存在名为clean的文件,使用make clean命令运行该Makfile时,正常清除所有的.o后缀文件。

如果该Makfile文件所在目录存在名为clean的文件再次使用make clean命令运行该Makfile,命令会失效!


二、原因分析

我们来分析一下原因:

对于具有依赖项的目标来说,如果目标不存在,或是目标所依赖的文件比目标新,就会执行后面的命令去产生或更新目标文件。

因为clean没有依赖,按说每次都会执行,但是由于当前文件夹存在clean文件,要拿clean文件和目标相比哪个更新,但是由于没有目标,make始终认为clean文件是最新的,因而不会执行相应的rm命令。


三、.PHONY

.PHONY是一个伪目标,Makefile中将.PHONY放在一个目标前就是指明这个目标是伪文件目标。其作用就是防止在Makefile中定义的执行命令的目标和工作目录下的实际文件出现名字冲突。

.PHONY clean

clean:
    rm -f *.o

.PHONY配置项的目标clean并不是其他文件生成的实际文件,使make命令会自动绕过隐含规则搜索过程,也就是说执行命令make clean会自动忽略名为"clean"文件的存在,因此声明.PHONY配置项会改善性能,并且不需要担心实际同名文件存在与否。

通俗一点讲,就是.PHONY修饰的目标clean并不是某个依赖项生成的实际文件,因此make命令不再去搜寻当前文件夹下是否有clean文件,这样少去做一些事,自然会改善性能,并且不用担心当前文件夹下是否有同名的文件。


欢迎大家进入【正规】嵌入式技术交流QQ群 100479172 ,讨论技术、工作、学业都可以,也可以一起跑路,锻炼身体


2022/04/05于武汉

  • 8
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Kashine

你的鼓励将是我创作的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值