Makefile中的PHONY

Makefile学习之路——PHONY 让你的makefile更专业。 在上一个Makefile所在目录下通过touch命令创建一个clean文件,执行make clean,将发现make总是提示clean文件是最新的,而不是按我们期望的那样对项目文件进行清楚操作。make这样的行为,是因为它将clean当做文件来处理,在当前目录下找到了clean文件,而且clean目标没有任何先决条件,所以当我们要求make构建clean目标时它会认为clean文件是最新的,从而拒绝我们真正的文件清除操作。出现这种情形,是因为我们对clean目标的定义与ma 阅读详情

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

如果编写一个规则,并不产生目标文件,则其命令在每次make该目标时都执行。例如:

clean:

rm *.o temp

因为"rm"命令并不产生"clean"文件,则每次执行"make clean"的时候,该命令都会执行。如果目录中出现了"clean"文件,则规则失效了:没有依赖文件,文件"clean"始终是最新的,命令永远不会执行;为避免这个问题,可使用".PHONY"指明该目标。如:

.PHONY : clean

这样执行"make clean"会无视"clean"文件存在与否。

已知phony目标并非是由其它文件生成的实际文件,make会跳过隐含规则搜索。这就是声明phony目标会改善性能的原因,即使你并不担心实际文件存在与否。

完整的例子如下:

.PHONY : clean

clean :

rm *.o temp

phony目标可以有依赖关系。当一个目录中有多个程序,将其放在一个makefile中会更方便。因为缺省目标是makefile中的第一个目标,通常将这个phony目标叫做"all",其依赖文件为各个程序:

all : prog1 prog2 prog3

.PHONY : all

prog1 : prog1.o utils.o

cc -o prog1 prog1.o utils.o

prog2 : prog2.o

cc -o prog2 prog2.o

prog3 : prog3.o sort.o utils.o

cc -o prog3 prog3.o sort.o utils.o

假设你的一个项目最后需要产生两个可执行文件。你的主要目标是产生两个可执行文件,但这两个文件是相互独立的——如果一 个文件需要重建,并不影响另一个。你可以使用“假象目的”来达到这种效果。一个假象目的跟一个正常的目的几乎是一样的, 只是这个目的文件是不存在的。因此, make总是会假设它需要被生成,当把它的依赖文件更新后,就会执行它的规则里的命令行。

如果在我们的makefile开始处输入:

all : exec1 exec2

其中exec1和exec2是我们做为目的的两个可执行文件。 make把这个 'all' 做为它的主要目的,每次执行时都会尝试把 'all' 更新。但既然这行规则里没有哪个命令来作用在一个叫 'all' 的 实际文件(事实上 all 并不会在磁碟上实际产生),所以这个规则并不真的改变 'all' 的状态。可既然这个文件并不存在,所以make会尝试更新all 规则,因此就检查它的依靠 exec1, exec2是否需要更新,如果需要,就把它们更新,从而达到我们的目的。

假象目的也可以用来描述一组非预设的动作。例如,你想把所有由make产生的文件删除,你可以在makefile里设立这样一个规则:

veryclean :

rm *.o

rm myprog

前提是没有其它的规则依靠这个 'veryclean' 目的,它将永远不会被执行。但是,如果你明确的使用命令 'make veryclean' , make会把这个目的做为它的主要目标,执行那些 rm命令。

如果你的磁碟上存在一个叫veryclean文件,会发生什么事?这 时因为在这个规则里没有任何依靠文件,所以这个目的文件一定是最新的了(所有的依靠文件都已经是最新的了),所以既使用户明确命令make重新产生它,也不会有任何事情发生。解决方法是标明所有的假象目的(用 .PHONY),这就告诉make不用检查它们是否存在于磁碟上,也不用查找任何隐含规则,直接假设指定的目的需要被更新。在makefile里加入下面这行包含上面规则的规则:

.PHONY : veryclean

就可以了。注意,这是一个特殊的make规则,make知道 .PHONY是一个特殊目的,当然你可以在它的依靠里加入你想用的任何假象目的,而make知道它们都是假象目的。



====

http://www.embeddedlinux.org.cn/html/xinshourumen/201203/04-1987.html

【Makefile】Makefile文件中的 .PHONY 的作用 目录 即看即用 详细说明 即看即用 作用:告诉make,.PHONY:后面跟着的名称都不是指某个文件,即make xxxx,如果makefile中xxxx 写在.PHONY:后面,那么make xxxx 就表示执行预定命令,而不是要(make)生成xxxx .PHONY:cleaninstall run update clean: rm -f *.o temp install: …… run: …… update: …… 执行 make clean 表示运行c... 阅读详情

相关推荐

makefile中的all和.PHONY的作用

请编写一个makefile同时编译、链接下面两个程序: main1.c: #include<stdio.h> int main(void) { printf("main1\n"); } main2.c: #include<stdio.h> int main(void) { printf("main2\n"); } 【分析】:...

Curtis’Blog 1326

java语言-基础(java中boolean型与c语言中boolean型的区别)

weixin_39089680的博客 1242

史上最全的Logisim运算器实验教程(基于华中科技大学计算机组成原理实验)

本博客是实现了Logisim的运算器设计,有具体的运算器设计的思路和运算器设计的电路,适合一步一步的按照思路做。

qq_62325622的博客 4万+

makefile学习

Makeflie基本使用makefile是Linux中的一个工具用于在一个工程中处理文件依赖,用于自动编译 什么是makefile在软件开发中,make是一个工具程序(Utility software),经由读取叫做“makefile”的文件,自动化建构软件。它是一种转化文件形式的工具,转换的目标称为“target”;与此同时,它也检...

测试 298

Python3 ACM模式输入输出全攻略:从牛客网到华为机试的实战技巧

本文详细解析了Python3在ACM模式下的输入输出处理技巧,针对牛客网、华为机试等在线评测系统。文章从input()函数本质出发,总结了六种高频输入模式的处理模板,并提供了链表、二叉树等数据结构的I/O实战方案,最后给出性能优化与常见避坑指南,帮助开发者高效应对算法笔试。

zero1的博客 998

Crossbar RRAM技术解析:从1TnR架构到存储革命

非易失性存储器(NVM)是数据存储的核心技术,其原理基于物理状态的稳定改变以实现数据持久化。阻变存储器(RRAM)作为一种新兴NVM,利用导电细丝在介质层中的形成与断裂实现数据存储,具有高速、低功耗和结构简单的优势。在工程实践中,RRAM面临潜行路径电流等挑战,而Crossbar提出的1TnR架构通过引入共享晶体管有效解决了这一问题,在保证性能的同时提升了集成密度。该技术与CMOS工艺兼容,支持后端集成与多层堆叠,为高密度存储和嵌入式应用提供了新的解决方案。结合当前行业对高能效、高密度存储的需求,RRAM在

weixin_42523104的博客 317

make之PHONY浅析

单词释义PHONY:假的1.不存在依赖clean: rm *.oall: hello (存在依赖)hello: main.o factorial.o hello.o    $(CC) main.o factorial.o hello.o -o hello2.加.PHONY,忽略与clean同名的文件.PHONY:cleanmake clean  >> rm *.o3.不加.PHONYclean:

在线笔记 1350

高分影像批处理第三回——RPC文件与几何校正

前言 前面两章部分完成了图像的基本组织和大气校正,可是对于遥感影像地理相关数据,精确的地理坐标也是非常关键的。L1级数据,可惜,并没有帮我们处理地理坐标系统。无论是打开ENVI还是用gdal工具查看图像元数据,其坐标系统都是错误的或者说是未读入的。因此本章节来解决这个问题。

weixin_43762038的博客 1万+

makefile中关于all和.PHONY

请编写一个makefile同时编译、链接下面两个程序: main1.c: #include int main(void) {     printf("main1\n"); } main2.c: #include int main(void) {     printf("main2\n"); } 【分析】:这里需要生成两个可执行文件main1和main2(两个目标)。由于m

xiaofei0859的专栏 1891

SAP CO实战:如何用KKA2/CJ88结果分析码搞定项目收入成本匹配(附真实案例)

本文深入探讨了SAP CO模块中KKA2和CJ88结果分析码在项目收入成本匹配中的高阶应用。通过真实案例解析,详细介绍了这两种分析码在分阶段收入确认和终验法项目中的配置技巧与实战经验,帮助财务人员高效解决复杂业务场景下的财务数据处理难题。

weixin_29230773的博客 166

爬虫不宕机!2026自愈式爬虫开发(Python+AI自动应对页面改版)

传统爬虫最大的痛点是"页面一改就宕机":前端布局调整、CSS选择器失效、数据结构变化,都会导致爬虫瘫痪,需要人工逐行修改代码。2026年,基于AI的自愈式爬虫成为行业标配:通过大模型自动识别页面结构变化、适配新的元素定位规则、修复数据提取逻辑,实现"页面改版不宕机,AI自动自愈"的企业级效果。本文从零讲解如何用Python+AI构建自愈式爬虫,聚焦页面改版自适应、故障自动修复、规则动态更新三大核心能力,附带可直接落地的生产级代码。问题场景解决方案LLM生成规则格式错误。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1215

makefile中.PHONY的作用是什么?

makefile中.PHONY的作用是什么? 初学makefile的时候,有一个关键字“.PHONY”搞不懂,在请教过同学之后豁然开朗,遂写下经验望帮助更多的同学能够理解。 在某度可以搜到phony的英文意思是:骗人的东西 那在makefile里也是这个意思吗?请往下看 在这里,我们运行make的时候是没有任何区别的 ...

Sunrise的博客 1万+

AgentScope Java 2.0 项目实战:教你完整搭建企业级多租户AI数据分析Agent平台

本文详细讲解如何从零开始构建一个企业级多租户AI数据分析Agent平台(agentscope-dataagent)。涵盖项目的环境准备、项目骨架搭建、后端15个核心模块开发(认证授权、Agent网关、会话管理、SSE流式聊天、能力市场、Webhook通道、Docker沙箱等)、前端完整开发(路由守卫、SSE流式读取、28个页面组件)、内置资源定义、构建打包、测试验证及单机/Docker/分布式部署全流程。

program哲学 595

makefile之.PHONY

makefile的PHONY关键字用法

cosseen的专栏 1万+

7、布尔网络的基础定义

本文介绍了布尔网络的基础定义及其在系统生物学中的应用。布尔网络是一种描述复杂系统动态行为的数学模型,由布尔变量和布尔函数组成,能够模拟生物系统中基因调控、信号传导和细胞代谢等过程。文章详细阐述了布尔网络的基本结构、动力学特征(如状态转移图和吸引子),以及其在生物建模中的重要价值,并探讨了优化和简化技术(如Backward Boolean Equivalence)如何提升其计算效率。

yhn45678901的博客 262

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Makefile中.PHONY的作用

一.实例 拿clean举例,如果make完成后,自己另外定义一个名叫clean的文件,再执行make clean时,将不会执行rm命令。   为了避免出现这个问题,需要.PHONY: clean 图示: (1)不添加.PHONY:clean 在Makefile所在的目录下touch一个clean文件 运行make–>运行make clean 结果:由于目录下clean文件

哒哒的博客 4万+

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

makefile里.PHONY的用处

makefile里PHONY的相关介绍 Phony Targets PHONY 目标并非实际的文件名:只是在显式请求时执行命令的名字。有两种理由需要使用PHONY 目标:避免和同名文件冲突,改善性能。 如果编写一个规则,并不产生目标文件,则其命令在每次make 该目标时都执行。例如:   clean:   rm *.o temp 因为"rm"命令并不产生"clean"文件,则每次执行"mak...

linux修行之路 5084

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

makefile中的phony使用

注:转自http://www.2cto.com/os/201109/103587.html        install:foo        install   -m  644 foo  /usr/bin .PHONY: install  看以上makefile的片段,使用了.PHONY这个目标,下面详细介绍她的用法. 来源:点击打开链接 .PHONY是一个特殊工作目标(specia

我不是大神 1623

Makefile中的PHONY 目标

Makefile中的PHONY 目标.phony是一个特殊工作目标(special target)它用来指定一个假想的工作目标,也就是说它后面的并不是一个实际文件,而且肯定要视为未更新(也就是说条件总是满足,需要处理)PHONY 目标并非实际的文件名:只是在显式请求时执行命令的名字。有两种理由需要使用PHONY 目标:避免和同名文件冲突,改善性能。  如果编写一个规则,并不产生目标文件,则其命令在每次make 该目标时都执行。  例如:clean:rm *.o temp  因为"rm"命令并不产生"clea

zhangboyj的专栏 1440

makefile中的.PHONY和all的作用

.PHONY(伪目标) 伪目标是这样一个目标:它不代表一个真正的文件名,在执行make时可以指定这个目标来执行所在规则定义的命令,有时也可以将一个伪目标称为标签。伪目标通过PHONY来指明。 PHONY定义伪目标的命令一定会被执行,下面尝试分析这种优点的妙处。 1、如果我们指定的目标不是创建目标文件,而是使用makefile执行一些特定的命令,例如: clean: rm *.o...

现从事游戏开发领域 | 团队项目be_with开发进行中 web方向感兴趣者私 ——We can do all things. 1万+

Makefile 中 .PHONY 的用途是什么?

Makefile 中的 .PHONY 是什么意思?我已经通过this,但它太复杂了。有人可以简单地向我解释一下吗?

HuntsBot的博客 3036

makefile .PHONY

PHONY .PHONY :clean clean: rm -rf a.out makfile经常会看到.PHONY的命令。.PHONY 的作用是什么 1首先要知道makefile中除了一些常量的声明外,剩下的指令基本都是以 下面的形式开始 targetfile:sourcefile command1 targetfile sourcefile co...

uglynakedman的博客 898

Makefile 中的.PHONY

PHONY 目标并非实际的文件名:只是在显式请求时执行命令的名字。有两种理由需要使用PHONY 目标:避免和同名文件冲突,改善性能。 所谓的PHONY这个单词就是伪造的意思,makefile中将.PHONY放在一个目标前就是指明这个目标是伪文件目标,如下:.PHONY:clean这里clean目标没有依赖文件,如果执行make命令的目录中出现了clean文件,由于其没有依赖文件,所以它...

diaoqu4574的博客 238
上一篇: putty 中文乱码解决方法
下一篇: 串口程序设计——struct termios结构体
Alan0521
博客等级 码龄19年 77粉丝 6原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值