前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Makefile的伪目标

Makefile的伪目标

作者头像
233333
发布2018-03-07 15:29:02
1.3K0
发布2018-03-07 15:29:02
举报

1、Makefile伪目标的格式:

代码语言:javascript
复制
.PHONY : clean
clean:
    rm xxxx

2、Makefile伪目标的作用:

第一种情况:

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

代码语言:javascript
复制
clean:
  rm xxxx

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

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

第二种情况:

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

代码语言:javascript
复制
SUBDIRS=foo bar baz
        Subdirs:
                for dir in $(SUBDIRS)
                do
                $(MAKE) –C $$dir
                done

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

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

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

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

代码语言:javascript
复制
SUBDIRS=foo bar baz
        .PHONY:subdirs $(SUBDIRS)
        subdirs: $(SUBDIRS)
        $(SUBDIRS):
                $(MAKE) –C $@

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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017-07-18 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1、Makefile伪目标的格式:
  • 2、Makefile伪目标的作用:
    • 第一种情况:
      • 第二种情况:
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档