zoukankan      html  css  js  c++  java
  • makefile中伪目标的理解

    1. 我们知道Makefile中的语法是这样:

    target ... : prerequisites ...
    command

    2. 假如编译两个文件可以这么写:

    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. 伪目标定义

    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在执行此规则时不会视图去查找隐含规则来创建这个目标。

  • 相关阅读:
    hashlib加密算法
    gc 模块常用函数
    functools函数中的partial函数及wraps函数
    ctime使用及datetime简单使用
    __new__方法理解
    __getattribute__小例子
    == 和 is 的区别
    线程_可能发生的问题
    线程_进程池
    【网站】 简单通用微信QQ跳转浏览器打开代码
  • 原文地址:https://www.cnblogs.com/xcywt/p/7931779.html
Copyright © 2011-2022 走看看