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. java jvm 字节码 实例

    https://blog.csdn.net/wuzhiwei549/article/details/80626677 代码 package strings; //: strings/WhitherSt ...

  2. 保存 laravel model 而不更新 timestamps 的方法

    $product = Product::find(1); $product->view_count += 1; $product->timestamps = false; $product ...

  3. php中常用的正则表达式函数

    php中常用的正则表达式函数 * preg_match() * preg_match_all() * preg_replace() * preg_filter() * preg_grep() * pr ...

  4. 步步为营-63-Asp.net-get与post

    1 get Get方式将数据发送到服务端,那么会将用户在表单中的数据放置到浏览器的地址栏中发送到服务器 格式:表单元素name属性的值=用户输入的值 请求地址:http://localhost:594 ...

  5. async/await套路编程

    对于并发任务,通常是用生成消费模型,对队列的处理可以使用类似master-worker的方式,master主要用户获取队列的msg,worker用户处理消息. 为了简单起见,并且协程更适合单线程的方式 ...

  6. otter部署【原创】

    环境IP:10.10.6.171 部署:mysql源库IP:10.10.6.172 部署:mysql目标库IP:10.10.6.173 部署:zookeeper,manager,node,canal ...

  7. [转] nginx配置HTTPS

    使用ssl模块配置同时支持http和https并存 一,生成证书 # 1.首先,进入你想创建证书和私钥的目录,例如: cd /etc/nginx/ # 2.创建服务器私钥,命令会让你输入一个口令: o ...

  8. C. 【UNR #2】黎明前的巧克力

    题解: 不会FWT,只能水40分了 首先,要观察出的性质就是: 选出的集合要满足所有数亦或等于0,而在其中任选子集都可以满足条件,答案就等于sigma(2^size(s)) 这样dp一波显然就可以O( ...

  9. work工作消息队列Round-robin与Fair dispatch

    一:介绍 1.模型 有两种情形,分别是轮训分发与公平分发. 2.出现的场景 考虑到simple queue中的缺点. 因为生产者发送消息后,消费者消费要花费时间,这个会造成消息的堆积. 二:Round ...

  10. hdu1698 Just a Hook 【区间修改】(模板题)

    题目链接:https://vjudge.net/contest/182746#problem/E 题目大意: 一段线段由n条小线段组成,每次操作把一个区间的小线段变成金银铜之一(金的价值为3,银为2, ...