关键词:makefile中的目标——文件、makefile中的伪目标——.PHONY
关键字、 伪目标的妙用、绕开.PHONY
关键字定义伪目标
1. makefile中的目标究竟是什么?
默认情况下:
1)make认为目标对应着一个文件
2)make比较目标文件和依赖文件的新旧关系,决定是否执行命令
3)make以文件处理作为第一优先级
2. makefile中的伪目标
- 通过
.PHONY
关键字声明一个伪目标 - 伪目标不对应任何实际的文件
- 不管伪目标的依赖是否更新,命令总是执行
- 伪目标的语法:先声明,后使用
.PHONY : clean
clean:
rm *.0 hello.out
- 伪目标的本质:是make中特殊目标
.PHONY
的依赖
3. 伪目标的妙用:规则调用(使用伪目标来模拟C语言中的函数调用)
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 : clean rebuild all
rebuild : clean all
all : hello.out
clean :
rm *.o hello.out
输出结果:
delphi@delphi-vm:~/code/ch1_make/2/2_2$ make all
gcc -o func.o -c func.c
gcc -o main.o -c main.c
gcc -o hello.out func.o main.o
delphi@delphi-vm:~/code/ch1_make/2/2_2$ make rebuild
rm *.o hello.out
gcc -o func.o -c func.c
gcc -o main.o -c main.c
gcc -o hello.out func.o main.o
4. 绕开.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 :
5. 小结
- 默认情况下,make认为目标对应着一个文件
-
.PHONY
用于声明一个伪目标,伪目标不对应实际的文件 - 为目标的本质是make中特殊目标
.PHONY
的依赖 - 使用伪目标可以模拟“函数调用”
声明:此文章为本人在学习狄泰软件学院《十二月提升计划》所做的笔记,参考书籍《专业嵌入式软件开发》——李云,文章中包含狄泰软件资料内容和《专业嵌入式软件开发》资料内容,一切版权归狄泰软件和《专业嵌入式软件开发》所有!