clean:
rm *.o temp
规则中“rm”不是创建文件“clean”的命令,而是删除当前目录下的所有.o文件和 temp
文件。当工作目录下不存在“clean”这个文件时,我们输入“make clean”,“rm *.o
temp”总会被执行。这是我们的初衷。
但是如果在当前工作目录下存在文件“clean” ,情况就不一样了,同样我们输入
“make clean”,由于这个规则没有任何依赖文件,所以目标被认为是最新的而不去执
行规则所定义的命令,因此命令“rm”将不会被执行。这并不是我们的初衷。为了解
决这个问题,我们需要将目标“clean”声明为伪目标。将一个目标声明为伪目标的方
这样目标“clean”就被声明为一个伪目标,无论在当前目录下是否存在“clean”这个
文件。我们输入“make clean”之后。“rm”命令都会被执行。而且,当一个目标被声
明为伪目标后,make在执行此规则时不会去试图去查找隐含规则来创建它。这样也提
高了 make的执行效率,同时也不用担心由于目标和文件名重名而使我们的期望失败。
在书写伪目标规则时,首先需要声明目标是一个伪目标,之后才是伪目标的规则定义。
目标“clean”的完整书写格式应该如下:
.PHONY: clean
clean:
rm *.o temp
法是将它作为特殊目标.PHONY”的依赖。如下:
.PHONY : clean