叁-《伪目标的引入》

伪目标的引入

思考

makefile 中的目标究竟是什么?

默认情况下

  • make 认为目标对应着一个文件
  • make 比较目标文件和依赖文件的新旧关系,决定是否执行命令
  • make 以文件处理作为第一优先级
  • 默认情况下一个目标对应一个文件

下面代码有什么意义?

clean :
    rm *.o hell.out

make clean

这里代码意思是不希望 clean 是一个目标,而是当作一个标签使用,make clean 希望执行 下面的命令

编程实验1:

hello.out all : func.o main.o
	gcc -o hello.out func.o main.o
	
func.o : func.c
	gcc -o func.o -c func.c
	
main.o : main.c
	gcc -o main.o -c main.c
	
clean :
	rm *.o hello.out

如果此时目录下有一个 clean 文件,此时会提醒 ‘clean’ 是最新的,那么 rm *.o hello.out 就不会执行

原因:
默认情况下,make 认为自己是处理文件的,makefile里面的每一个目标都对应一个具体的文件,这个时候 clean 这个目标确实对应了一个文件,而且发现 clean 文件时最新的,就没必要执行命令;

makefile 中的伪目标

  • 通过 .PHONY 关键字声明一个伪目标
  • 伪目标不对应任何实际文件
  • 不管伪目标的依赖是否更新,命令总是执行

伪目标的语法

先声明,后使用
本质
伪目标是 make 中特殊目标 .PHONY 的依赖

.PHONY : clean
## 注释 ##
clean :
    rm *.o hello.out

伪目标的妙用:规则调用(函数调用)

原理:
当一个目标的依赖包含伪目标时,伪目标所定义的命令总是被执行

.PHOMY : clean rebuild all

## other rules ##  
rebuild : clean all

clean :
    rm *.o hello.out

技巧:绕开 .PHONY 关键字定义的伪目标

原理:
如果一个规则没有命令或者依赖,并且它的目标不是一个存在的文件名,在执行此规则时,目标总会被认为时最新的

clean : FORCE  
    rm *.o hello.out

FORCE: 

小结

  • 默认情况下,make 认为目标对应着一个文件
  • .PHONY 用于声明一个伪目标,伪目标不对应实际文件
  • 伪目标的本质是 make 中特殊目标 .PHONY 的依赖
  • 使用伪目标可以模拟 ‘函数调用’
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值