乐趣区

关于程序员:叁伪目标的引入

伪指标的引入

思考

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 的依赖
  • 应用伪指标能够模仿 ‘ 函数调用 ’
退出移动版