Makefile中同名目标的处理

1、Makefile中存在同名目标怎么处理

target1: dep1
	cmd1

target1: dep2
	cmd2
	
#上面的代码等同于下面
target1: dep2 dep1
	cmd2

(1)首先Makefile中允许存在同名的目标,执行时会报警告但是不会终止执行;
(2)靠后的同名目标会"覆盖"掉前面的同名目标,但是不是简单的覆盖,而是保留前一个同名目标的依赖关系,丢弃掉前一个同名目标的命令;

2、示例代码

all: depend3 depend5
	@echo "all 1111111111"
	
all: depend4
	@echo "all 22222222222222"
	
depend3:
	@echo "depend 3333333333333"

depend4:
	@echo "depend 4444444444444"

depend5:
	@echo "depend 5555555555555"

3、代码执行结构分析

[root@]$ make
Makefile:5: warning: overriding recipe for target `all'
Makefile:2: warning: ignoring old recipe for target `all'
depend 4444444444444
depend 3333333333333
depend 5555555555555
all 22222222222222

(1)如果Makefile中存在同名的目标,在执行时会报警告:靠后的同名目标会覆盖掉靠前的同名目标;
(2)执行的效果就是前面说的保留前一个同名目标的依赖关系,丢弃掉前一个同名目标的命令,对照代码的执行结果很容易理解;

4、总结

(1)Makefile中存在同名目标是我在一个项目中遇到的,当时Makefile的执行流程不符合预期,害我花了一些时间来排查,最后才知道是被靠后的同名目标给覆盖了;
(2)在实际项目中,整个编译的代码是比较复杂的,分成多个文件并且分散在不同的目录下,在执行过程中存在跳转执行和include的包含关系,如果存在同名目标的覆盖问题,会给后面维护的程序员带来麻烦;
(3)建议不要使用同名覆盖的机制。本身就不常用也不是必须用,还要程序员去推理到底覆盖后的目标是怎样的,第一次遇到的程序员可能花不少时间来排查问题;

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

正在起飞的蜗牛

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

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

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

打赏作者

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

抵扣说明:

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

余额充值