makefile 学习的点滴总结-(4)

目录:

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”,这样可以免出现一些不必要的麻烦!这是我们推荐的用法。

posted @ 2013-11-27 14:47  tony7373  阅读(139)  评论(0编辑  收藏  举报