chongyong的个人主页

http://www.qtcn.org/bbs/u/184854  [收藏] [复制]

chongyong

  • 1

    关注

  • 0

    粉丝

  • 2

    访客

  • 等级:新手上路
  • 总积分:12
  • 男,1994-06-21

最后登录:2018-06-09

更多资料

日志

makefile中伪目标的理解

2017-10-20 16:00
1. 我们知道Makefile中的语法是这样:
    target ... : prerequisites ...
        command
        …
        …
2. 假如编译两个文件可以这么写:
  1. a.o:a.c
      gcc -c a.c
    b.o:b.c
      gcc -c b.c
    Test: a.o b.o
      gcc -o Test a.o b.o
    clean:
      rm *.o
我们可以单独这么运行:
make a.o
或者
make b.o
或者
make clean
注意上面三个的区别。前两个都会生成目标,而第三个不会生成目标,仅仅希望执行所在规则(clean)定义的命令(rm)。
这个时候就需要伪目标出马了:目的不是为了生成目标,仅仅是希望执行其所在规则定义后面的命令

3. 伪目标定义
  1. a.o:a.c
      gcc -c a.c
    b.o:b.c
      gcc -c b.c
    Test: a.o b.o
      gcc -o Test a.o b.o
    .PHONY:clean
    clean:
      rm *.o
就像上面这样,多一个 .PHONY声明,那么clean就是伪目标了

4. 为什么要使用伪目标:
1)避免在我们的Makefile中定义的只执行命令的目标和工作目录下实际文件名字出现冲突。(比如,假如当前目录有一个clean文件,那么上面的 make clean 就不能达到我们的预期了)
2)提高执行效率,被声明为伪目标后,make在执行此规则时不会视图去查找隐含规则来创建这个目标。




分类:默认分类|回复:0|浏览:430|全站可见|转载
 

Powered by phpwind v8.7 Certificate Copyright Time now is:04-25 14:37
©2005-2016 QTCN开发网 版权所有 Gzip disabled