makefile中伪目标的理解

1. 我们知道Makefile中的语法是这样:

target ... : prerequisites ...
command

 

2. 假如编译两个文件可以这么写:

a.o:a.c
  gcc -c a.c
b.o:b.c
  gcc -c b.c
Test: a.o b.o  
 gcc -o Test a.o b.o
clean:
  rm *.o

我们可以单独这么运行:
make a.o
或者
make b.o
或者
make clean
注意上面三个的区别。前两个都会生成目标,而第三个不会生成目标,仅仅希望执行所在规则(clean)定义的命令(rm)。
这个时候就需要伪目标出马了:目的不是为了生成目标,仅仅是希望执行其所在规则定义后面的命令

 

3. 伪目标定义

a.o:a.c
  gcc -c a.c
b.o:b.c
  gcc -c b.c
Test: a.o b.o
  gcc -o Test a.o b.o
.PHONY:clean
clean:
  rm *.o

就像上面这样,多一个 .PHONY声明,那么clean就是伪目标了


4. 为什么要使用伪目标:
1)避免在我们的Makefile中定义的只执行命令的目标和工作目录下实际文件名字出现冲突。(比如,假如当前目录有一个clean文件,那么上面的 make clean 就不能达到我们的预期了)
2)提高执行效率,被声明为伪目标后,make在执行此规则时不会视图去查找隐含规则来创建这个目标。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值