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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏一个会写诗的程序员的博客

《Springboot极简教程》Springboot使用Kotlin和Java混合编程配置工程目录结构让kotlin代码的归kotlin目录,java代码归java目录Java代码Kotlin代码互相

要想实现Springboot使用Kotlin和Java混合编程,需要使用kotlin插件:

662
来自专栏Java后端技术

解决java.lang.IllegalArgumentException: No converter found for return value of type: class java.util.A

  最近闲来无事,想自己搭建一套Spring+SpringMVC+Mybatis+Mysql的环境(搭建步骤会在以后博客中给出),结果运行程序时,适用@Resp...

753
来自专栏緣來來來

Mac 下使用tree命令列目录

相信很多使用过Linux的用户都用过tree命令,它可以像windows的文件管理器一样清楚明了的显示目录结构。不过有是有并不是系统本身就自带的,如果需要的话,...

111
来自专栏hotqin888的专栏

EngineerCMS工程师知识管理系统支持项目模板

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/hotqin888/article/det...

783
来自专栏章鱼的慢慢技术路

Linux中几个与文档相关的命令

1463
来自专栏个人分享

Linux知识体系之路径属性与目录

  最近在看鸟哥的Linux私房菜,我觉得这本书还是很不错的。这里进行相关的总结。

501
来自专栏一个爱瞎折腾的程序猿

常用cmd代码片段及.net core打包脚本分享

保存:set currentPath=%cd% 输出:echo %currentPath

513
来自专栏逸鹏说道

临时处理小记:把Numpy的narray二进制文件转换成json文件

临时处理一个Numpy的二进制文件,分析知道里面是dict类型,简单小记一下,如果Numpy和Python基础不熟悉可以看我之前写的文章(贴一下Numpy的)

713
来自专栏iOS开发攻城狮的集散地

Xcode常用快捷键

2046
来自专栏随心DevOps

三分钟使用 Python 处理 Nginx 日志

有什么 有 14 台机器(意味着我们有14份日志) 一台可以连到这 14 太机器的机器(有 Python 2.6) 要做什么 获取 14 台机器上某时间段内...

3137

扫描关注云+社区