目录:
1、伪目标
2、rm命令的细节问题,RM
///////////////////////////////////////////////////////////////////////////////////
1、伪目标
(1)为了执行规则所创建的命令,而不是去生成目标。如:
clean:
rm *.o temp
规则中的rm不是去创建clean这个目标的命令,而是为了删除.o和temp文件。
但是如果该目录下已存在的一个clean文件,则“make clean”不会执行任何动作。
所以,将一个目标生成伪目标的方法是将它作为一个特殊目标 .PHONY 如:
.PHONY:clean
clean:
rm *.o temp
################################################
(2)all:
使用一个称为“all ”的伪目标来作为终极目标,它的依赖文件就是那些需要创
建的程序。下边就是一个例子:
#sample Makefile
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
执行make时,目标“all ”被作为终极目标,我们可以通过make的命令行选项来明确指定需要重建的
程序。例如:“make prog1”
////////////////////////////////////////////////////////////////////////////////////////////////////////////////
2、rm命令的细节问题,RM
通常在清除文件的伪目标所定义的命令中“rm”使用选项“–f ”( --force )来防止在缺少删除文件时出错并退出,使“make clean”过程失败。也可以在“rm”之前加上“- ”来防止“rm”错误退出,这种方式时make会提示错误信息但不会退出。为了不看到这些讨厌的信息,需要使用上述的第一种方式。
另外make存在一个内嵌隐含变量“RM”,它被定义为:“ RM = rm –f ”。因此在书写“clean”规则的命令行时可以使用变量“$(RM) ”来代替“rm”,这样可以免出现一些不必要的麻烦!这是我们推荐的用法。