伪目标的引入

1 makefile中目标的本质

思考:makefile中的目标究竟是什么?

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

下面的代码有什么意义?

这里写图片描述

编程实验:有趣的目标


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

2 伪目标的引入

makefile中的伪目标

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

伪目标的语法:先声明,后使用

  • 本质:伪目标是make中特殊目标.PHONY的依赖
.PHONY : clean

## 注释 ##

clean : 
    rm -rf *.o hello.out

编程实验:使用伪目标


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

.PHONY : clean

clean :
    rm -rf *.o hello.out

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

这里写图片描述

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

hello.out : 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



.PHONY : rebuild clean all

rebuild : clean all

all : hello.out

clean :
    rm *.o hello.out

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

  • 原理:如果一个规则中没有命令和依赖,并且它的目标不是一个存在的文件名(实际上存在此文件名也会被认为是最新的);在执行此规则时,目标总是会被认为最新的

这里写图片描述


hello.out : 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 : FORCE
    rm *.o hello.out
FORCE : 

3 小结

  • 默认情况下,make认为目标对应着一个文件
  • .PHONY用于声明一个伪目标,伪目标不对应着实际的文件
  • 伪目标的本质是make中特殊目标.PHONY的依赖
  • 使用伪目标可以模拟“函数调用”

修改记录


时间动作
2017.7.4首次上传

参考资料


唐老师 — 狄泰软件学院 — 十二月提升计划

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值