单词phony (即phoney)的意思是:伪造的,假的。来自collins的解释是:

If you describe something as phoney, you disapprove of it because it is false
rather than genuine.

那么,在Makefile中,.PHONY后面的target表示的也是一个伪造的target, 而不是真实存在的文件target,注意Makefile的target默认是文件。

举个例子:

$ cat -n Makefile1
clean:
rm -f foo
$ cat -n Makefile2
.PHONY: clean
clean:
rm -f foo

Makefile1和Makefile2的差别就是在Makefile2中定义了:

 .PHONY: clean
  • 直接Make看看
$ ls -l
total
-rw-r--r-- huanli huanli Jul : Makefile1
-rw-r--r-- huanli huanli Jul : Makefile2
$ make -f Makefile1 clean
rm -f foo
$ make -f Makefile2 clean
rm -f foo

Makefile1和Makefile2的行为没有啥子区别嘛,呵呵

  • 创建一个文件clean, 再make看看
$ touch clean
$ ls -l
total
-rw-r--r-- huanli huanli Jul : clean
-rw-r--r-- huanli huanli Jul : Makefile1
-rw-r--r-- huanli huanli Jul : Makefile2
$ make -f Makefile1 clean
make: 'clean' is up to date.
$ make -f Makefile2 clean
rm -f foo

区别来了,Makefile1拒绝了执行clean, 因为文件clean存在。而Makefile2却不理会文件clean的存在,总是执行clean后面的规则。由此可见,.PHONY clean发挥了作用。

小结:

.PHONY: clean
o means the word "clean" doesn't represent a file name in this Makefile;
o means the Makefile has nothing to do with a file called "clean"
in the same directory.

参考资料:

Makefile中.PHONY的作用的更多相关文章

  1. makefile中PHONY的重要性

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

  2. makefile中.PHNOY的用法

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

  3. Makefile 中的.PHONY

    PHONY 目标并非实际的文件名:只是在显式请求时执行命令的名字.有两种理由需要使用PHONY 目标:避免和同名文件冲突,改善性能. 所谓的PHONY这个单词就是伪造的意思,makefile中将.PH ...

  4. .PHONY makefile中的伪目标

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

  5. Makefile中 的 phony target,empty target

    phony target Makefile的语法很简单 <target> : <prerequisites> [tab] <commands> 目标.先决条件.命令 ...

  6. Makefile ------ .PHONY的作用

    看下面的例子 Makefile文件 .PHONY: cleanclean: rm *.o 当Makefile文件所在目录有文件名为clean的文件,命令行“.PHONY: clean”又没添加的话,执 ...

  7. 关于makefile中自动产生依赖的理解

    本博文是在学习了<GNU Make中文手册>后记录下来的自己的关于自动产生makefile依赖的语句的理解,向大家分享. <GNU make中文手册>中的相关章节见一下链接: ...

  8. makefile里PHONY的相关介绍

      Phony Targets PHONY 目标并非实际的文件名:只是在显式请求时执行命令的名字.有两种理由需要使用PHONY 目标:避免和同名文件冲突,改善性能. 如果编写一个规则,并不产生目标文件 ...

  9. [转] Makefile 基础 (7) —— Makefile 中 make 的运行

    该篇文章为转载,是对原作者系列文章的总汇加上标注. 支持原创,请移步陈浩大神博客:(最原始版本) http://blog.csdn.net/haoel/article/details/2886 我转自 ...

随机推荐

  1. uva1653

    本来想刷道签到题结果被卡住了.这题题意描述有点问题,数字又不一定都是个位数...难道是我英语太差了? digits就表示0~9这几个数?唉,还是太弱了.这题就是用了一个bfs,应该说还是有点意思的,直 ...

  2. Properties类、序列化流与反序列化流、打印流、commons-IO

    Properties类 特点: 1.Hashtable的子类,map集合中的方法都可以用: 2.该集合没有泛型,键值都是字符串: 3.是一个可以持久化的属性集,键值可以存到集合中,也可存到持久化的设备 ...

  3. jsp 中出现大量红线,而且页面能正常访问

    第一次,出现这种情况真的很苦恼,估计是有强迫症的原因,就是看着不舒服,都页面能正常访问,但是还是想解决它 解决方法:依次按下 ctl+A ctl+X.ctl+V, 没看错就是 全选,剪切,粘贴 就好了 ...

  4. nodejs mongodb 数据库封装DB类 -转

    使用到了nodejs的插件mongoose,用mongoose操作mongodb其实蛮方便的. 关于mongoose的安装就是 npm install -g mongoose 这个DB类的数据库配置是 ...

  5. android sqlite 数据唯一性

    sqlite在遇到数据重复的时候要做判断在插入是不是有点太麻烦了?一个好的数据库设计就可以搞定了. 当要控制唯一性的数据是主键的时候可以设置 CONSTRAINT [] PRIMARY KEY ([Q ...

  6. nodeclub route

    这里是把web_router.js放在根目录下,也可以放在routes文件件下,其实都可以. 这里就是一些url与controller和middleware对应

  7. Android-Kotlin-set/get方法的使用

    Student.kt package cn.kotlin.kotlin_oop04 open class Person { open var personName:String = "我是父 ...

  8. hdu 1.2.7

    #include<cstdio> #include<iostream> using namespace std; int main() { //freopen("in ...

  9. 【learning】 扩展欧几里得算法(扩展gcd)和乘法逆元

    有这样的问题: 给你两个整数数$(a,b)$,问你整数$x$和$y$分别取多少时,有$ax+by=gcd(x,y)$,其中$gcd(x,y)$表示$x$和$y$的最大公约数. 数据范围$a,b≤10^ ...

  10. POJ 2725

    #include <iostream> #include <string> #include <algorithm> #define MAXN 400005 usi ...