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

  • 相关阅读:
    EF6的DbContext动态连接字符串
    Swagger配置
    Xamarin学习资源收集
    xmarin开发问题收集
    javascript基础
    Vue3.0到底带来来哪些变化视频笔记1
    Git操作
    EFCore 通过数据库生成模型
    Web Deploy远程发布
    ASP.NET CORE系列【七】分析NetCore启动原理
  • 原文地址:https://www.cnblogs.com/linhaostudy/p/7200629.html
Copyright © 2011-2022 走看看