makefile中.PHONY目标的意义
在makefile文件中,会频繁的看到许多".PHONY"目标,例如:
.PHONY: build_docker_image
build_docker_image:# build dockerfile from stdin so that we don't send the build-context; source is bind-mounted in the development environmentcat ./dockerfiles/Dockerfile.dev | docker build ${DOCKER_BUILD_ARGS} -t $(DEV_DOCKER_IMAGE_NAME) -
PHONY的意思是“虚假的、赝品”。在makefile中,.PHONY是对其后的目标的一个说明,说明目标并不一定是一个真正的文件,不要将其当做makefile管理的文件来处理。因此如果要构建此目标,必须执行目标构建的命令,而不检查依赖文件修改时间等因素来确定命令是否执行。
https://www.cnblogs.com/idorax/p/9306528.html和https://www.cnblogs.com/yuanqiangfei/p/8058369.html中介绍了两种.PHONY目标的典型使用场景。分别是:
- 目标其实只是一个操作,例如clean,但是目录下却存在同名的文件。这时使用.PHONY表示目标不是文件,必须执行命令。
- 目标确实是一个文件,但是目标文件的构建很复杂,其构建是通过其他方式完成的,在当前makefile中没有包含其完整的依赖关系和构建方式。默认方式下makefile检查依赖后可能不执行目标的构建命令。这时使用.PHONY表示目标不是当前makefile直接构建的,不要通过检查依赖来决定是否执行命令,必须执行其构建命令来完成构建。
需要注意的是虽然.PHONY目标不通过依赖来决定目标是否要执行命令,但是还是会检查依赖的,依赖目标不存在时仍然会尝试构建或报错。
总结一下:.PHONY目标一定会执行构建命令。一般用于目标非实体文件,或目标文件不受makefile管理、依赖关系不完整的情况。
makefile中.PHONY目标的意义相关推荐
- makefile中.PHONY的最直接理解
makefile中.PHONY的最直接理解 为了避免和文件重名的这种情况,可以使用一个特殊的标记".PHONY"来显示地指明一个目标是"伪目标",向make说明 ...
- makefile中.PHONY的作用是什么?
makefile中.PHONY的作用是什么? 初学makefile的时候,有一个关键字".PHONY"搞不懂,在请教过同学之后豁然开朗,遂写下经验望帮助更多的同学能够理解. 在 ...
- Makefile中.PHONY伪目标的作用(完整)
第一种情况:避免命令与目录下的文件名重复 实际上这个情况很少发生,但网上大部分博客也仅介绍了这一种情况.这里以如下Makefile简单介绍一下: clean:rm -f *.o temp 如果当前目录 ...
- Makefile中.PHONY的作用
单词phony (即phoney)的意思是:伪造的,假的.来自collins的解释是: If you describe something as phoney, you disapprove of i ...
- Makefile中.PHONY的含义
目录标题 含义 作用 说明 含义 单词phony (即phoney)的意思是:伪造的,假的. 在Makefile中, .PHONY后面的target表示的也是一个伪造的target, 而不是真实存在的 ...
- Makefile中指定目标(MAKECMDGOALS)
有一个 make 的环境变量叫"MAKECMDGOALS",这个变量中会存放你所指定的终极目标的列表,如果在命令行上,你没有指定目标,那么,这个变量是空值.这个变量可以让你使 用在 ...
- makefile 中的.PHONY
makefile 中.PHONY 的理解 make xxx. 是否执行xxx 这个target 对应的规则. 取决于这个target 是否存在, 以及生成这个target 的input file ...
- 对makefile中:单冒号普通规则和::双冒号规则的理解 -转
原文地址:对makefile中:单冒号普通规则和::双冒号规则的理解 作者:gliethttp luther: /gliethttp/a.c /gliethttp/b.c /gliethttp2/c. ...
- .PHONY makefile中的伪目标
拿clean举例,如果make完成后,自己另外定义一个名叫clean的文件,再执行make clean时,将不会执行rm命令. 为了避免出现这个问题,需要.PHONY: clean ========= ...
最新文章
- 第三方支付接口的技术比较研究
- GIS软件开发工具包TatukGIS Developer Kernel 发布 v11.3.0-Unstable1丨附下载
- [BZOJ4894]天赋
- go split 正则_WEGO使用—华大基因在线GO功能注释
- abap性能优化——利用凭证的number ranger提高abap程序性能
- 微信支付退款回调处理 php
- weka和matlab完成完整分类实验
- 数据湖,当然得要全闪存的!
- 抽象类的成员特点 学习笔记
- java如何构建图_如何从传递边构建子图?
- 笔记——Transformer
- Zuul 代理文件上传、为路由提供 hystrix 回退、过滤器、超时时间
- 管理感悟:要想到自己脖子后面有灰
- 单片机基础——C语言
- html 设置origin,background-origin属性怎么用
- 你的优势在哪?开宝马的学渣教会我的事
- 激光雷达与组合导航标定
- 研究生阶段记录3-PCR介绍
- 中南大学计算机大一学什么时候发,中南大学计算机学院2019年夏令营
- 【PTA 7-9】剥洋葱