这称之为假象目的   (Phony   Targets)

假设你的一个项目最后需要产生两个可执行文件。你的主要目标   是产生两个可执行文件,但这两个文件是相互独立的——如果一   个文件需要重建,并不影响另一个。你可以使用“假象目的”来   达到这种效果。一个假象目的跟一个正常的目的几乎是一样的,   只是这个目的文件是不存在的。因此,   make   总是会假设它需要   被生成,当把它的依赖文件更新后,就会执行它的规则里的命令   行。

如果在我们的   makefile   开始处输入:

all   :   exec1   exec2

其中   exec1   和   exec2   是我们做为目的的两个可执行文件。   make   把这个   'all '   做为它的主要目的,每次执行时都会尝试把   'all '   更新。但既然这行规则里没有哪个命令来作用在一个叫   'all '   的   实际文件(事实上   all   并不会在磁碟上实际产生),所以这个规   则并不真的改变   'all '   的状态。可既然这个文件并不存在,所以   make   会尝试更新   all   规则,因此就检查它的依靠   exec1,   exec2   是否需要更新,如果需要,就把它们更新,从而达到我们的目的。

假象目的也可以用来描述一组非预设的动作。例如,你想把所有由   make   产生的文件删除,你可以在   makefile   里设立这样一个规则:

veryclean   :
    rm   *.o
    rm   myprog

前提是没有其它的规则依靠这个   'veryclean '   目的,它将永远   不会被执行。但是,如果你明确的使用命令   'make   veryclean '   ,   make   会把这个目的做为它的主要目标,执行那些   rm   命令。

如果你的磁碟上存在一个叫   veryclean   文件,会发生什么事?这   时因为在这个规则里没有任何依靠文件,所以这个目的文件一定是   最新的了(所有的依靠文件都已经是最新的了),所以既使用户明   确命令   make   重新产生它,也不会有任何事情发生。解决方法是标   明所有的假象目的(用   .PHONY),这就告诉   make   不用检查它们   是否存在于磁碟上,也不用查找任何隐含规则,直接假设指定的目   的需要被更新。在   makefile   里加入下面这行包含上面规则的规则:

.PHONY   :   veryclean

就可以了。注意,这是一个特殊的   make   规则,make   知道   .PHONY   是一个特殊目的,当然你可以在它的依靠里加入你想用的任何假象   目的,而   make   知道它们都是假象目的。

转载于:https://www.cnblogs.com/yuzaipiaofei/archive/2011/07/21/4124519.html

在Makefile中的 .PHONY 是做什么的?相关推荐

  1. makefile 中的.PHONY

    makefile 中.PHONY  的理解 make xxx.   是否执行xxx 这个target 对应的规则. 取决于这个target 是否存在, 以及生成这个target 的input file ...

  2. makefile中的.PHONY和all的作用

    .PHONY(伪目标) 伪目标是这样一个目标:它不代表一个真正的文件名,在执行make时可以指定这个目标来执行所在规则定义的命令,有时也可以将一个伪目标称为标签.伪目标通过PHONY来指明. PHON ...

  3. 【Linux + Makefile】Makefile中的.PHONY作用以及赋值运算(各种=符号)的区别

    笔者常年在Linux环境编程,经常在项目中与Makefile打交道,最近总结了几个Makefile的小的知识点,分享给大家. 通过阅读本文,你将了解到以下知识: 1.Makefilke中的.PHONY ...

  4. Makefile中.PHONY的作用

    单词phony (即phoney)的意思是:伪造的,假的.来自collins的解释是: If you describe something as phoney, you disapprove of i ...

  5. 【Makefile】Makefile文件中的 .PHONY 的作用

    目录 即看即用 详细说明 即看即用 作用:告诉make,.PHONY:后面跟着的名称不是指文件名,如果makefile中xxxx 写在.PHONY:后面,那么make  xxxx 就表示执行xxxx ...

  6. makefile中的all和.PHONY的作用

    请编写一个makefile同时编译.链接下面两个程序: main1.c: #include int main(void) { printf("main1\n"); } main2. ...

  7. makefile中.PHONY目标的意义

    在makefile文件中,会频繁的看到许多".PHONY"目标,例如: .PHONY: build_docker_image build_docker_image:# build ...

  8. makefile中.PHONY的作用是什么?

    makefile中.PHONY的作用是什么?   初学makefile的时候,有一个关键字".PHONY"搞不懂,在请教过同学之后豁然开朗,遂写下经验望帮助更多的同学能够理解. 在 ...

  9. Makefile中.PHONY的含义

    目录标题 含义 作用 说明 含义 单词phony (即phoney)的意思是:伪造的,假的. 在Makefile中, .PHONY后面的target表示的也是一个伪造的target, 而不是真实存在的 ...

最新文章

  1. 十张图解释机器学习的基本概念
  2. mysql默认排序规则_mysql 字符集与排序规则的简单了解
  3. 曼彻斯特解密_曼彻斯特编码解码方法与流程
  4. 在.net中加载dll的一种错误问题原因及处理
  5. android+清除循环动画,android - 如何使用ViewPropertyAnimator生成循环动画?
  6. C++自定义异常处理
  7. Java异常统一处理
  8. 10个最好的 Node.js MVC 框架
  9. postman测试websocket_还在手工写接口测试文档,已经out了
  10. SVD在推荐系统中的应用【推荐】
  11. php 重定义数组k,PHP基础篇之数组
  12. MySQL参数max_connect_errors分析释疑
  13. gitLab数据备份和迁移
  14. mysql preparing状态_mysql stage preparing,help!!!
  15. html5播放加速,html5倍速播放插件
  16. 【操作系统】操作系统
  17. html视频怎么转换成图片,如何将小视频转换成GIF动图或将GIF动图转换成视频
  18. RabbitMQ内存消耗
  19. SoundHound与本田合作,加速开发AI语音助手
  20. FTP协议及工作原理详解

热门文章

  1. 字符串互换后字典序最小
  2. LeetCode 14. Longest Common Prefix
  3. LeetCode Arranging Coins
  4. LeetCode Merge k Sorted Lists(有序单链表数组的合并)
  5. You can Solve a Geometry Problem too(线段相交问题)
  6. Cesium 中两种添加 model 方法的区别
  7. php_yaf 安装
  8. zip压缩与解压缩示例
  9. jeasyui控件事件和方法的使用方法
  10. Cocos2d-x的坐标系统