Makefile中对同一个目标的多次定义

本文探讨了在Makefile中针对同一目标进行多次定义的情况。每个依赖项都会被检查,但最终的recipe会覆盖之前的recipe,意味着只会执行最后指定的目标recipe。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在Makefile中对同一个目标进行多次定义

每个依赖都会被检查执行

最后的recipe会覆盖前面的recipe

即只有最后一个目标的recipe被执行

 

 

#
#

all: $(warning 1 prerequisite)p1
	$(warning 1 recipe)

all: $(warning 2 prerequisite)p2
	$(warning 2 recipe)

all:
	echo excute recipe

p1:
	echo p1 recipe

p2:
	echo p2 recipe

# Cancel implicit rules on Makefile
Makefile: ;

.PHONY: all p1 p2


 

 

$ make --debug=all
GNU Make 3.82
Built for x86_64-redhat-linux-gnu
Copyright (C) 2010  Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Reading makefiles...
Reading makefile `Makefile'...
Makefile:4: 1 prerequisite
Makefile:7: 2 prerequisite
Makefile:8: warning: overriding recipe for target `all'
Makefile:5: warning: ignoring old recipe for target `all'
Makefile:11: warning: overriding recipe for target `all'
Makefile:8: warning: ignoring old recipe for target `all'
Updating makefiles....
 Considering target file `Makefile'.
  Finished prerequisites of target file `Makefile'.
 No need to remake target `Makefile'.
Updating goal targets....
Considering target file `all'.
 File `all' does not exist.
  Considering target file `p2'.
   File `p2' does not exist.
   Finished prerequisites of target file `p2'.
  Must remake target `p2'.
Invoking recipe from Makefile:17 to update target `p2'.
echo p2 recipe
Putting child 0x220fa60 (p2) PID 32343 on the chain.
Live child 0x220fa60 (p2) PID 32343 
p2 recipe
Reaping winning child 0x220fa60 PID 32343 
Removing child 0x220fa60 PID 32343 from chain.
  Successfully remade target file `p2'.
  Considering target file `p1'.
   File `p1' does not exist.
   Finished prerequisites of target file `p1'.
  Must remake target `p1'.
Invoking recipe from Makefile:14 to update target `p1'.
echo p1 recipe
Putting child 0x220fc40 (p1) PID 32344 on the chain.
Live child 0x220fc40 (p1) PID 32344 
p1 recipe
Reaping winning child 0x220fc40 PID 32344 
Removing child 0x220fc40 PID 32344 from chain.
  Successfully remade target file `p1'.
 Finished prerequisites of target file `all'.
Must remake target `all'.
Invoking recipe from Makefile:11 to update target `all'.
echo excute recipe
Putting child 0x220fda0 (all) PID 32345 on the chain.
Live child 0x220fda0 (all) PID 32345 
excute recipe
Reaping winning child 0x220fda0 PID 32345 
Removing child 0x220fda0 PID 32345 from chain.
Successfully remade target file `all'.


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值