作用:
1.防止命令跟文件夹下的文件重名,造成不执行
2.不管是否最新,都会执行,不会提示"make: `prog2' is up to date."
3.一般情况下,伪目标不作为另一个目标的依赖,
原因:1.伪目标一般只执行一些小命令,通过命令行单独执行,如"make clean"
2.当每次执行这个目标时,伪目标作为依赖,每次都要执行
4.伪目标可以有自己的依赖,如创建多个app时
all : prog1 prog2 prog3
.PHONY : all
prog1 : prog1.o utils.o
cc -o prog1 prog1.o utils.o
prog2 : prog2.o
cc -o prog2 prog2.o
prog3 : prog3.o sort.o utils.o
cc -o prog3 prog3.o sort.o utils.o
关于 .PHONY : all这一句
如果要规范,这一行是必须的。(虽然即使不写,实际应用中也没有什么问题。)
PHONY的作用是告诉make这个target不是真正的文件,只是一个虚拟的target。
如果你的目录下恰好有一个名字为all的文件。加上那一行和不加那一行就完全不同。如果没有那一行,make all应该是提示"all is up-to-date".如果有那一行,则是编译prog1/2/3.
例子中,all作为最终目标,但又作为伪目标存在,但会重建(不管存在不存在)它的依赖,分别生成prog1 prog2 prog3
总的意思就是:如果执行到.PHONY 指定的目标,就去执行
经过实验
cc= gcc
.PHONY:prog1
prog2:prog2.c
$(cc) -o prog2 prog2.c
prog1:
rm -f prog1
make时会执行 $(cc) -o prog2 prog2.c
2..PHONY:prog1
prog1:
rm -f prog1
$(cc) -o prog2 prog2.c
破除伪目标不能作为终极目标的想法