Makefile中.PHONY的作用
单词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.
参考资料:
- Phony Targets of GNU Make
Makefile中.PHONY的作用的更多相关文章
- makefile中PHONY的重要性
伪目标是这样一个目标:它不代表一个真正的文件名,在执行make时可以指定这个目标来执行所在规则定义的命令,有时也可以将一个伪目标称为标签.伪目标通过 PHONY来指明. PHONY定义伪目标的命令 ...
- makefile中.PHNOY的用法
makefile中PHONY的重要性 伪目标是这样一个目标:它不代表一个真正的文件名,在执行make时可以指定这个目标来执行所在规则定义的命令,有时也可以将一个伪目标称为标签.伪目标通过 PHON ...
- Makefile 中的.PHONY
PHONY 目标并非实际的文件名:只是在显式请求时执行命令的名字.有两种理由需要使用PHONY 目标:避免和同名文件冲突,改善性能. 所谓的PHONY这个单词就是伪造的意思,makefile中将.PH ...
- .PHONY makefile中的伪目标
我的理解: 拿clean举例,如果make完成后,自己另外定义一个名叫clean的文件,再执行make clean时,将不会执行rm命令. 为了避免出现这个问题,需要.PHONY: clean === ...
- Makefile中 的 phony target,empty target
phony target Makefile的语法很简单 <target> : <prerequisites> [tab] <commands> 目标.先决条件.命令 ...
- Makefile ------ .PHONY的作用
看下面的例子 Makefile文件 .PHONY: cleanclean: rm *.o 当Makefile文件所在目录有文件名为clean的文件,命令行“.PHONY: clean”又没添加的话,执 ...
- 关于makefile中自动产生依赖的理解
本博文是在学习了<GNU Make中文手册>后记录下来的自己的关于自动产生makefile依赖的语句的理解,向大家分享. <GNU make中文手册>中的相关章节见一下链接: ...
- makefile里PHONY的相关介绍
Phony Targets PHONY 目标并非实际的文件名:只是在显式请求时执行命令的名字.有两种理由需要使用PHONY 目标:避免和同名文件冲突,改善性能. 如果编写一个规则,并不产生目标文件 ...
- [转] Makefile 基础 (7) —— Makefile 中 make 的运行
该篇文章为转载,是对原作者系列文章的总汇加上标注. 支持原创,请移步陈浩大神博客:(最原始版本) http://blog.csdn.net/haoel/article/details/2886 我转自 ...
随机推荐
- Swagger生成WebAPI文档
WebAPI2.0 项目可以使用Swagger能够轻易查看API文档,查看以下配置 1.打开程序包管理控制台输入: Install-Package Swashbuckle 2.在对应项目里的App_S ...
- input.php
<?php /** * */ class Input { function get($index = NULL, $xss_clean = FALSE) { if($index == NULL ...
- python3使用ip地址代理
第一种IP地址代理方式from urllib import request if __name__ == "__main__": # 访问网址 url = 'http://www. ...
- DFS遍历中forward、backward以及cross边的界定
再来看以下具体例子:
- jar包获取资源文件
背景 写的一个spring boot项目打成jar包部署运行下,打成jar包,提示找不到资源文件,如下图: 直接通过idea是可以运行的,但打成jar包后提示找不到资源文件,简单查阅后了解到是因为ja ...
- 动态生成html元素并为元素追加属性
动态生成HTML元素的方法有三种: 第一种:document.createElement()创建元素,再用appendChild( )方法将元素添加到指定节点 <!DOCTYPE html> ...
- Java内存模型与共享变量可见性
此文已由作者赵计刚授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 注:本文主要参考自<深入理解Java虚拟机(第二版)>和<深入理解Java内存模型> ...
- Linux常用命令 - ls
目录 Linux常用命令-ls 简介 ls -F ls -a ls -R ls -l 后记 Linux常用命令-ls 简介 ls主要用于显示文件和目录列表.作为最常见的Linux命令,大家应该都不会陌 ...
- Spring Boot切换为APR模式
Spring Boot内置了tomcat容器,直接运行Application就可以启动web服务器. 在tomcat中提供了三种方式:BIO.NIO.APR. BIO tomcat7以下的版本都是BI ...
- python 多版本管理pyenv和virtualenv虚拟开发环境
pyenv是管理多个python版本的工具. 1.pyenv的安装 git clone https://github.com/yyuu/pyenv.git ~/.pyenv 2.将PYENV_ROOT ...