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模板表示要编译多个子目录中的工程。

  • 相关阅读:
    Linux (Ubuntu)安装ssh
    Linux (Ubuntu)提示ifconfig:找不到命令
    Docker介绍
    微服务用到的技术
    移动端BI的设计
    Cobbler Web管理(二)
    基于CentOS7环境下的Cobbler部署介绍(一)
    使用google-perftools优化nginx内存管理提升性能
    解决 nginx 配置TLS1.2无效,总是TLS1.0的问题
    在nginx中将爬虫过来的请求转到指定的后端服务
  • 原文地址:https://www.cnblogs.com/linhaostudy/p/7200629.html
Copyright © 2011-2022 走看看