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

规则所定义的命令不是去创建目标文件,而是使用make指定具体的目标来执一些特定的命令。像下边那样:

clean:

rm *.o temp

规则中“rm”不是创建文件“clean”的命令,只是删除当前目录下的所有.o文件和temp文件。在工作目录下不存在“clean”这个文件时,我们输入“make clean”后,“rm *.o temp”总会被执行。这是我们的初衷。

但当前工作目录下存在文件“clean”时情况就不一样了,在我们输入“make clean”时。规则没有依赖文件,所以目标被认为是最新的而不去执行规则作定义的命令,命令“rm”将不会被执行。这并不是我们的初衷。为了避免这个问题,我们可以将目标“clean”明确的声明为伪目标。将一个目标声明为伪目标需要将它作为特殊目标.PHONY”的依赖。如下:

.PHONY : clean

这样目标“clean”就是一个伪目标,无论当前目录下是否存在“clean”这个文件。我们输入“make clean”之后。“rm”命令都会被执行。而且,当一个目标被声明为伪目标后,make在执行此规则时不会试图去查找隐含规则来创建这个目标。这样也提高了make的执行效率,同时我们也不用担心由于目标和文件名重名而使我们的期望失败。在书写伪目标规则时,首先需要声明目标是一个伪目标,之后才是伪目标的规则定义。目标“clean”书写格式应该如下:

.PHONY: clean

clean:

rm *.o temp

举例:创建makefile

test:*.o
    gcc -o $@ $^

*.o:*.c
    gcc -c $<

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

makefile之伪目标(6)相关推荐

  1. Makefile的伪目标

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

  2. makefile常见伪目标(.PHONY 不会去检查目标文件)

    .PHONY 不会去检查目标文件

  3. .PHONY makefile中的伪目标

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

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

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

  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. Makefile3、书写规则(文件搜寻、伪目标、多目标、静态模式、自动生成依赖性)

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

最新文章

  1. 【SSH三个框架】Hibernate第八部分基础:经营-many关系
  2. 移动端网页fixed布局问题解决方案
  3. LSGO软件技术团队2015~2016学年第十七周(1221~1227)总结
  4. python 面试必问,不会真的要打脸~
  5. 验1-8 输出倒三角图案 (5 分)
  6. 力扣-191 位1的个数
  7. 大数据架构师必读的NoSQL建模技术
  8. 量化投资与Python
  9. 深入浅出VMware的组网模式
  10. Topaz滤镜2018全系列合集Topaz Plugins Bundle
  11. Ubuntu16.04关机后自动重启解决方案
  12. OpenCv图像处理之颜色通道分离与多通道融合、图像线性融合
  13. Day3 函数 参数 变量 递归——python学习之路
  14. 几何画板用迭代法作图的技巧
  15. configure: error: C++ preprocessor /lib/cpp fails sanity check
  16. BootStrap框架模块:BootStrap4实战
  17. access是用来干什么的_Access是干嘛的,可以用来干什么?
  18. 网能上但是显示没有连接服务器是怎么回事,宽带网络已连接但没有internet访问是怎么回事...
  19. 广西大学计算机学院王珏,表白 | 电气学院的学霸男神女神篇
  20. 学习Python难度高吗?零基础可以学习吗?

热门文章

  1. C语言的单向链表的操作方法
  2. cgi硬盘安装器_系统镜像安装CGI备份还原
  3. (王道408考研操作系统)第四章文件管理-第一节6:文件基本操作
  4. etc/ld.so.conf文件
  5. 三维卷积神经网络预测MNIST数字详解
  6. 将一段区间的偶数分解为两个素数相加(Java)
  7. bitsadmin命令(Windows下载文件命令)
  8. DirtyCow漏洞复现(脏牛、大脏牛、Linux、Android、提权)
  9. Nmap 添加自定义服务指纹
  10. builtins.TypeError: sequence item 0: expected a bytes-like object, str found