zoukankan      html  css  js  c++  java
  • Makefile的伪目标

    1、Makefile伪目标的格式:

    .PHONY : clean
    clean:     rm xxxx

    2、Makefile伪目标的作用:

    第一种情况:

    如果我们需要书写这样的一个规则:规则所定义的命令不是去创建目标文件,而是通过make命令行明确指定它来执行一些特点的命令,就像例题中的clean。当文件夹中没有clean这个文件的时候,我们输入“make clean”能按照初衷执行,但是一旦文件夹中出现clean文件,我们再次输入“make clean”,由于这个规则没有任何依赖文件,所以目标被认为是最新的而不去执行规则所定义的命令。所以rm命令不会被执行。为了解决问题,我们将目标clean定义成伪目标。

    clean:
      rm xxxx

    如果同一个目录下有一个clean文件,那么  make clean的动作将不会执行rm动作;

    所以,增加.PHONY伪目标的使用的话,就会忽略目录下clean这个文件,直接执行rm动作;

    第二种情况:

    伪目标的另一种使用场合时在make的并行和递归执行过程中。

    SUBDIRS=foo bar baz
            Subdirs:
                    for dir in $(SUBDIRS)
                    do
                    $(MAKE) –C $$dir
                    done

    如果这样写,会出现几个问题:

    1、 当子目录执行make出现错误,make不会退出;

    2、 使用这种shell的循环方式时,没有用到make对目录的并行处理功能。

    有了伪目标就可以解决上面的两个问题。

    SUBDIRS=foo bar baz
            .PHONY:subdirs $(SUBDIRS)
            subdirs: $(SUBDIRS)
            $(SUBDIRS):
                    $(MAKE) –C $@

    其中subdirs模板表示要编译多个子目录中的工程。

  • 相关阅读:
    小知识点随手记
    [学习笔记]行列式
    集群心跳机制
    [学习笔记]整数划分数
    如何修改集群的公网信息(包括 VIP) (文档 ID 1674442.1)
    [学习笔记]二叉树的遍历
    Oracle RAC/Clusterware 多种心跳heartbeat机制介绍 RAC超时机制分析
    bzoj4671: 异或图——斯特林反演
    为Oracle Clusterware修改公用及私有网络接口
    [学习笔记]斯特林反演
  • 原文地址:https://www.cnblogs.com/linhaostudy/p/7200629.html
Copyright © 2011-2022 走看看