伪指标的引入
思考
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 的依赖
- 应用伪指标能够模仿 ‘ 函数调用 ’