makefile里PHONY总结

来源:互联网 发布:厚学网网站源码 编辑:程序博客网 时间:2024/06/11 04:06

作用:

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.
cc= gcc 
.PHONY:prog1 
prog1: 
 rm -f prog1 
prog2:prog2.c 
 $(cc) -o prog2 prog2.c  
make时会执行 rm -f prog1 

总结论:执行"make" 会执行Makefile中第一个   command:  命令,不管这个命令是否为伪目标
破除伪目标不能作为终极目标的想法
0 0