1. 为什么需要 .PONHY
make以文件处理作为第一优先级,make认为目标对应着一个文件。当目标文件存在且时间戳很新的时候命令便不会执行。
但有时候我们是希望命令总是执行的,考虑如下规则:
clean :
rm *.o *.elf
目标是清楚编译生成的目标文件, 我们希望在执行 make clean 时命令总是会执行。但因为目标对应着一个文件,所以当工作目录下有一个名为 clean的文件或文件夹,命令便不会执行,所以make引入了 .PONHY关键字来解决这个问题。
2. 定义
经过 .PONHY关键字修饰的目标不再对应 真实的文件,故称之为伪目标。
注:伪目标和真实的文件没有联系,所以即使工作目录下存在于伪目标同名的文件命令也会无条件执行。
2. .PONHY的使用
示例如下:
# 经.PHONY修饰, rebuild clean all成为伪目标,不再与真实的文件对应,作为目标时,命令总是会被执行
.PHONY : rebuild clean all
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
all : hello.out
clean :
rm *.o hello.out
rebuild : clean all