PHONY 目标并非实际的文件名:只是在显式请求时执行命令的名字。有两种理由需要使用PHONY 目标:避免和同名文件冲突,改善性能。

所谓的PHONY这个单词就是伪造的意思,makefile中将.PHONY放在一个目标前就是指明这个目标是伪文件目标,如下:
.PHONY:clean
这里clean目标没有依赖文件,如果执行make命令的目录中出现了clean文件,由于其没有依赖文件,所以它永远是最新的,所以根据make的规则clean目标下的命令是不会被执行的。如下的例子:

[yangfan@dhcp-13-42 test]$ cat Makefile
obj = 1.c 2.c 3.c 4.c

all:
touch $(obj)
clean:
rm -rf $(obj)
[yangfan@dhcp-13-42 test]$
[yangfan@dhcp-13-42 test]$ make
touch 1.c 2.c 3.c 4.c
[yangfan@dhcp-13-42 test]$ ls
1.c 2.c 3.c 4.c Makefile
[yangfan@dhcp-13-42 test]$ make clean
rm -rf 1.c 2.c 3.c 4.c
[yangfan@dhcp-13-42 test]$ ls
Makefile
[yangfan@dhcp-13-42 test]$ make
touch 1.c 2.c 3.c 4.c
[yangfan@dhcp-13-42 test]$ touch clean
[yangfan@dhcp-13-42 test]$ ls
1.c 2.c 3.c 4.c clean Makefile
[yangfan@dhcp-13-42 test]$ make clean
make: `clean' is up to date.
[yangfan@dhcp-13-42 test]$ ls
1.c 2.c 3.c 4.c clean Makefile
[yangfan@dhcp-13-42 test]$

这个Makefile中all目标是创建空的1.c 2.c 3.c 和4.c 。  clean目标是删除这些文件,但是如果当前目录中出现了一个clean文件,在执行
make clean时就不会在执行clean目标下的命令了。下面看看在clean目标前加上.PHONY之后的情况:

[yangfan@dhcp-13-42 test]$ cat Makefile
obj = 1.c 2.c 3.c 4.c

all:
touch $(obj)
.PHONY: clean
clean:
rm -rf $(obj)
[yangfan@dhcp-13-42 test]$ ls
1.c 2.c 3.c 4.c clean Makefile
[yangfan@dhcp-13-42 test]$ make clean
rm -rf 1.c 2.c 3.c 4.c
[yangfan@dhcp-13-42 test]$ ls
clean Makefile
[yangfan@dhcp-13-42 test]$

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

  1. Makefile中 的 phony target,empty target

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

  2. Makefile中.PHONY的作用

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

  3. makefile中PHONY的重要性

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

  4. .PHONY makefile中的伪目标

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

  5. Makefile 中会在多处地方看到 FORCE

    转载:http://blog.csdn.net/wzw88486969/article/details/11739737 在内核的 Makefile 中会在多处地方看到 FORCE ,比如: # vm ...

  6. makefile中伪目标的理解

    1. 我们知道Makefile中的语法是这样: target ... : prerequisites ... command - - 2. 假如编译两个文件可以这么写: a.o:a.c  gcc -c ...

  7. makefile中.PHNOY的用法

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

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

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

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

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

随机推荐

  1. iframe传递参数问题

    在页面中嵌入了iframe,如果需要传递参数到iframe中 1.通过将参数嵌入到url中,在iframe中使用${param.xxx}可以获取 2.通过将参数存入到session中,在iframe中 ...

  2. swoole 安装方法

    http://www.cnblogs.com/tudou1223/p/4530280.html 最近想用PHP写一个聊天网站,于是注意到了swoole这个扩展,看上它就是因为事件驱动异步非阻塞. Sw ...

  3. Javascript之BOM与DOM讲解

    一.Javascript组成 JavaScript的实现包括以下3个部分: ECMAScript(核心) 描述了JS的语法和基本对象. 文档对象模型 (DOM) 处理网页内容的方法和接口 浏览器对象模 ...

  4. java.net.ServerSocket 解析

    注:本文来自:简书:jianshu 作者:jijs链接:http://www.jianshu.com/p/7c0722a8b66f來源:简书著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注 ...

  5. poj3696 欧拉函数引用

    不知道错在哪里,永远T /* 引理:a,n互质,则满足a^x=1(mod n)的最小正整数x0是φ(n)的约数 思路:求出d=gcd(L,8) 求出φ(9L/d)的约数集合,再枚举约数x,是否满足10 ...

  6. python 全栈开发,Day61(库的操作,表的操作,数据类型,数据类型(2),完整性约束)

    昨日内容回顾 一.回顾 定义:mysql就是一个基于socket编写的C / S架构的软件 包含: ---服务端软件 - socket服务端 - 本地文件操作 - 解析指令(mysql语句) ---客 ...

  7. 【C++】拷贝构造函数(深拷贝,浅拷贝)详解

    一.什么是拷贝构造函数  首先对于普通类型的对象来说,它们之间的复制是很简单的,例如: ; int b = a; 而类对象与普通对象不同,类对象内部结构一般较为复杂,存在各种成员变量. 下面看一个类对 ...

  8. 浅析微信支付:微信支付简单介绍(小程序、公众号、App、H5)

    本文是[浅析微信支付]系列文章的第二篇,主要讲解一下普通商户接入的支付方式以及其中的不同之处. 上篇文章讲了本系列的大纲,没有看过的朋友们可以看一下. 浅析微信支付:前篇大纲 微信支付是集成在微信客户 ...

  9. [NOI2012]随机数生成器

    题解: 很显然是一道矩阵优化dp 然而表示我很智障地把式子一个个带入 然后就发现了为什么会有那些部分分(大概用扩欧是70吧) 注意用矩阵计算的时候要用快速乘(当然想写高精那也随便,时间无限宽裕) 代码 ...

  10. Codeforces Round #359 (Div. 2) D - Kay and Snowflake

    D - Kay and Snowflake 题目大意:给你一棵数q个询问,每个询问给你一个顶点编号,要你求以这个点为根的子树的重心是哪个节点. 定义:一棵树的顶点数为n,将重心去掉了以后所有子树的顶点 ...