3.makefile伪目标的引入
问题:makefile中的目标究竟是什么?
makefile的目标
- make认为目标对应着一个文件
- make比较目标文件和依赖文件的新旧关系,决定是否执行命令
- make以文件处理作为第一优先级
当我们不需要目标是一个文件时,只是需要指向相应的命令就可以了。但是如果存在一个与这个目标同名的文件时,make就会先去判断这个文件是否最新,在判断是否执行该目标的命令。
问题:我们如何绕过make文件处理判断的步骤,直接执行该目标呢?
makefile为我们提供了伪目标的概念。
makefile的伪目标
- 通过.PHONY关键字声明一个伪目标
- 伪目标不对应任何实际文件
- 不管伪目标的依赖是否更新,命令总是执行
伪目标的使用
- 语法:先声明,后使用
- 本质:伪目标是make中特殊目标.PHONY的依赖
示例代码:伪目标的使用
.PHONY: clean rebuild all
rebuild: clean all
@echo "rebuild the project"
clean:
@echo "clean all obj file"
all:
@echo "create the hex file"
输出结果:
C:\exercise\makefile>make
“clean all obj file”
“create the hex file”
“rebuild the project”
分析:
1.当一个目标的依赖包含伪目标时,伪目标所定义的命令总是会被执行。
2.伪目标也可以存在依赖目标
3.依赖目标从左到右的顺序被执行
小技巧:绕开.PHONY关键字定义伪目标
原理:如果一个规则没有命令或者依赖,并且它的目标不是一个存在的文件名;在执行此规则时,目标总会被认为是最新的。
clean: FORCE
rm *.o hello.out
FORCE: