Makefile 中的.PHONY
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的更多相关文章
- Makefile中 的 phony target,empty target
phony target Makefile的语法很简单 <target> : <prerequisites> [tab] <commands> 目标.先决条件.命令 ...
- Makefile中.PHONY的作用
单词phony (即phoney)的意思是:伪造的,假的.来自collins的解释是: If you describe something as phoney, you disapprove of i ...
- makefile中PHONY的重要性
伪目标是这样一个目标:它不代表一个真正的文件名,在执行make时可以指定这个目标来执行所在规则定义的命令,有时也可以将一个伪目标称为标签.伪目标通过 PHONY来指明. PHONY定义伪目标的命令 ...
- .PHONY makefile中的伪目标
我的理解: 拿clean举例,如果make完成后,自己另外定义一个名叫clean的文件,再执行make clean时,将不会执行rm命令. 为了避免出现这个问题,需要.PHONY: clean === ...
- Makefile 中会在多处地方看到 FORCE
转载:http://blog.csdn.net/wzw88486969/article/details/11739737 在内核的 Makefile 中会在多处地方看到 FORCE ,比如: # vm ...
- makefile中伪目标的理解
1. 我们知道Makefile中的语法是这样: target ... : prerequisites ... command - - 2. 假如编译两个文件可以这么写: a.o:a.c gcc -c ...
- makefile中.PHNOY的用法
makefile中PHONY的重要性 伪目标是这样一个目标:它不代表一个真正的文件名,在执行make时可以指定这个目标来执行所在规则定义的命令,有时也可以将一个伪目标称为标签.伪目标通过 PHON ...
- 关于makefile中自动产生依赖的理解
本博文是在学习了<GNU Make中文手册>后记录下来的自己的关于自动产生makefile依赖的语句的理解,向大家分享. <GNU make中文手册>中的相关章节见一下链接: ...
- [转] Makefile 基础 (7) —— Makefile 中 make 的运行
该篇文章为转载,是对原作者系列文章的总汇加上标注. 支持原创,请移步陈浩大神博客:(最原始版本) http://blog.csdn.net/haoel/article/details/2886 我转自 ...
随机推荐
- SKlearn库学习曲线
思想: # 1.现将所有样本用交叉验证方法或者(随机抽样方法) 得到 K对 训练集-验证集# 2.依次对K个训练集,拿出数量不断增加的子集如m个,并在这些K*m个子集上训练模型.# 3.依次在对应训练 ...
- == 和 equal 区别
在初学 Java 时,可能会经常碰到下面的代码: String str1 = new String("hello"); String str2 = new String(" ...
- hdu1698
/*区间更新*/#include <cstdio> #include <algorithm> using namespace std; #define lson l , m , ...
- JS高级 - 面向对象2(prototype定义)
定义和用法 prototype 属性允许您向对象添加属性和方法 注意: Prototype 是全局属性,适用于所有的Javascript对象. 语法 object.prototype.name=val ...
- webpack 模块标识符(Module Identifiers)
让我们向项目中再添加一个模块 print.js: project webpack-demo |- package.json |- webpack.config.js |- /dist |- /src ...
- [转] 由Request Method:OPTIONS初窥CORS
刚接触前端的时候,以为HTTP的Request Method只有GET与POST两种,后来才了解到,原来还有HEAD.PUT.DELETE.OPTIONS…… 目前的工作中,HEAD.PUT.DELE ...
- Python list 函数
list 修改列表元素: 下标直接修改 list[下标]=值 列表添加元素: list.append(值)末尾追加 列表插入元素: list.insert(下标,元素) 列表删除元素: del li ...
- POJ 1862 Stripies 【优先队列】
题意:科学家发现一种奇怪的东西,他们有重量weight,如果他们碰在一起,总重变成2*sqrt(m1*m2).要求出最终的重量的最小值. 思路:每次选取质量m最大的两个stripy进行碰撞结合,能够得 ...
- 练习题|MySQL
MySQL主要内容: 1.数据库介绍.类型.特性2.MySQL数据库安装.连接.启动.停止3.表字段类型介绍.主键约束.表创建语句4.常用增删改查语句.分组.聚合5.外键管理.unique字段.表结构 ...
- 014 在Spark中完成PV与UV的计算,重在源代码
1.代码 object LogPVAndUV{ def main(args:Array[String]):Unit={ val conf=new SparkConf() .setMaster(&quo ...