Makefile伪目标

伪目标是这样一个目标:它不代表一个真正的文件名,在执行make时可以指定这个目标来执行其所在规则定义的命令,有时也可以将一个伪目标称为一个标签。使用伪目标有两点要求:
1)避免在我们的Makefile中定义的只执行命令的目标和工作目录下的实际文件出现名字冲突。
2)提高执行make时的效率,特别是对一个大型的工程来说,编译的效率也许你同样关心。

1.如果我们需要书写的规则不是去创建一个目标文件,而是通过make命令行明确指定它来执行一些特定的命令。像常见的clean目标:
clean:
规则中“rm”不是创建文件“clean”的命令,而是删除当前目录下的所有.o 文件和temp文件。当工作目录下不存在“clean”这个文件时,我们输入“make clean”就可以完成上述的删除工作。但是如果在当前工作目录下存在“clean”这个文件就不一样了,同样我们输入“make clean”,由于这个规则没有任何依赖文件,所以目标被认为是最新的而不去执行规则所定义的命令,因此“rm”将不会被执行。为解决这个问题,我们将目标“clean”声明为伪目标。

.PHONY:clean
clean:rm -f *.o temp

2.伪目标的另外一个使用场合是在make的并行和递归执行过程中。此情况下一般会存在一个变量,定义为所有需要make的子目录。对多个目录进行make的实现方式可以是:在一个规则的命令行中使用shell循环来完成。

3.一般情况下,一个伪目标不作为另一个目标的依赖,这是因为当一个目标文件的依赖包含伪目标时,每一次在执行这个规则时伪目标所定义的命令都会被执行。当一个伪目标没有作为任何目标的依赖时,我们只能通过make的命令行来明确指定它为make的终极目标,来执行它所在规则所定义的命令,例如make clean。

4.在Makefile中,一个伪目标可以有自己的依赖。在一个目录下如果需要创建多个可执行程序,我们可以将所有程序的重建规则在一个Makefile中描述。因为Makefile中第一个目标是“终极目标”,约定的做法是使用过一个称为“all”的伪目标来作为终极目标,它的依赖文件就是那些需要创建的程序:

#sample Makefile
all : prog1 prog2 prog3
.PHONY : all
prog1 : prog1.o utils.occ -o prog1 prog1.o utils.o
prog2 : prog2.occ -o prog2 prog2.o
prog3 : prog3.o sort.o utils.occ -o prog3 prog3.o sort.o utils.o

执行make时,目标“all”作为终极目标。为了完成对它的更新,make会创建或者重建目标“all”的所有依赖文件。当需要单独更新某一个程序时,我们可以通过make的命令行选项来明确指定需要重建的程序,例如make prog1。

2017-11-21-LR 来自GNU make中文手册

Makefile伪目标相关推荐

  1. Makefile的伪目标

    1.Makefile伪目标的格式: .PHONY : cleanclean:rm xxxx 2.Makefile伪目标的作用: 第一种情况: 如果我们需要书写这样的一个规则:规则所定义的命令不是去创建 ...

  2. .PHONY makefile中的伪目标

    拿clean举例,如果make完成后,自己另外定义一个名叫clean的文件,再执行make clean时,将不会执行rm命令. 为了避免出现这个问题,需要.PHONY: clean ========= ...

  3. 【Makefile由浅入深完全学习记录3】伪目标的引入

    只有不停的努力,才能看起来很轻松!!!加qq1126137994共同学习探讨更多技术!!! 1.思考: makefile中的目标究竟是什么? 在默认的情况下: make认为目标对应一个文件 make比 ...

  4. makefile之伪目标(6)

    伪目标是这样一个目标:它不代表一个真正的文件名,在执行make时可以指定这个目标来执行其所在规则定义的命令,有时我们也可以将一个伪目标称为标签.使用伪目标有两点原因:1. 避免在我们的Makefile ...

  5. linux 建立伪目标过程,linux之Makefile 编写、规则、伪目标、变量

    什么是Makefile?首先,make是一个工具程序(Utility software),是一种控制编译或者重复编译软件的工具:make可以自动管理软件编译的内容.方式和时机从而使程序员能够把精力集中 ...

  6. Makefile中.PHONY伪目标的作用(完整)

    第一种情况:避免命令与目录下的文件名重复 实际上这个情况很少发生,但网上大部分博客也仅介绍了这一种情况.这里以如下Makefile简单介绍一下: clean:rm -f *.o temp 如果当前目录 ...

  7. 第2天.make的学习(第二部分)对伪目标的理解

    一.目标,依赖,命令 也许大家觉得这个不重要,但今天我有了新的认识,所以写了下来.这三个就是Makefile的全部,但今天我要重点说一下它的执行顺序.每个Makefile都有且只有一个终极目标,下设若 ...

  8. make: *** 没有规则可制作目标“distclean”。 停止。_Makefile伪目标

    这一个章节我们主要讲的是 Makefile 中的伪目标.所谓的伪目标可以这样来理解,它并不会创建目标文件,只是想去执行这个目标下面的命令.伪目标的存在可以帮助我们找到命令并执行.使用伪目标有两点原因: ...

  9. makefile之目标与依赖(1)

    1.makefile的规则: target:prerequisites          command target是一个目标文件,可以是一个.o文件,也可以是可执行文件,还可以是标签(伪目标)  ...

  10. Makefile3、书写规则(文件搜寻、伪目标、多目标、静态模式、自动生成依赖性)

    第三部分.书写规则 规则包含两个部分,一个是依赖关系,一个是生成目标的方法.在 Makefile 中,规则的顺序是很重要的,因为,Makefile 中只应该有一个最终目标,其它的目标都是被这个目标所连 ...

最新文章

  1. Python 测试开发从入门到高手成长之路
  2. 程序员的日常,过于真实 | 每日趣闻
  3. 012_Comparable和Comparator实例
  4. lambda sort
  5. 【PM模块】维护业务处理流程—外部维护
  6. mac mysql prefpane_【MySQL数据库开发之一】Mac下配置安装数据库-MySQL
  7. 天庭最牛系统 推荐下载_PPT中有哪些特别好用的插件?(含下载链接)
  8. C++基础学习-20120516
  9. 学校机房为什么要穿鞋套?
  10. 记录——《C Primer Plus (第五版)》第十章编程练习第十二题
  11. linux系统开机图片修改,linux开机logo 和 android开机logo 的修改
  12. Excel对于筛选后单元格进行“复制”与“粘贴”
  13. DSP 2812: 使用C++封装SCI
  14. 学计算机连系统都不会装,Win7系统安装不了iTunes该如何解决-电脑自学网
  15. keep practicing for fast tying
  16. java int short区别_Java基础之数据比较Integer、Short、int、short
  17. 电脑微信语音通话听不到对方声音或无法播放消息语音
  18. 前TT(前T/T)与后TT(后T/T),以及信用证(LC,L/C)付款方式比较
  19. 二项式定理与二项分布、多项式定理与多项分布
  20. 推荐几个不错的美术游戏资源

热门文章

  1. GitHub 有哪些 macOS 开源软件?
  2. vue中使用router打开一个新的窗口
  3. Deep Voice 论文
  4. windows media player 官方修复工具下载及修复方法
  5. 纵横算法之二:社招如何面对算法面试
  6. 富龙热电:望眼欲穿矿难拿
  7. .Net core web api 上传图片代码 。 AutoMapper映射注入。sql suger数据库依赖注入
  8. Android开发——数据库框架Suger遇到的大坑(Gson和Suger的复用Bean请见“大坑三”)
  9. 概率分布之二项分布与多项分布
  10. 计算机上静音快捷键是什么,电脑静音快捷键是什么(电脑静音快捷键怎么设置)...