makefile之伪目标
伪目标
1. 伪目标的语法:
在书写伪目标时,首先需要声明伪目标,然后再定义伪目标规则.
1.1 声明伪目标:
.PHONY clean (这里声明clean是伪目标)
1.2 定义伪目标规则:
clean: (这里定义伪目标clean的规则,即伪目标的执行动作)
rm *.c
2. 伪目标的作用:
2.1 避免目标名与文件名冲突
也即,如果指定了伪目标,那么伪目标一定会被执行。
2.2 提高执行效率
当一个目标被声明为 伪目标后,makefile在执行规则时不会去试图查找隐含规则来创建它。
3. 伪目标的示例:
3.1 文件名冲突
3.1.1 当文件名冲突示例
假设,makefile 当前目录下有与伪目标clean 同名的文件clean,而makefile中没有定义伪目标clean。
#.PHONY: clean
clean:
rm temp
从执行的结果可以看出,目标clean并未执行。
.PHONY: clean
clean:
rm temp
从执行结果可以看出,伪目标clean执行了,由于当前目录下没有temp目录,所以提示“No such file or directory”。但是在 rm前加上-,可以忽略错误,make会继续向下执行。
3.1.2 多文件名冲突示例
.PHONY: all clean prog1 prog2 prog3
all: prog1 prog2 prog3
prog1:
gcc prog1/main.c -o p1
prog2:
gcc prog2/main.c -o p2
prog3:
gcc prog3/main.c -o p3
clean:
rm p1 p2 p3
源码路径:https://github.com/suonikeyinsuxiao/trunk/tree/master/makefile_project/phony/phony2
如果将伪目标的声明改为 .PHONY: all clean,目标prog1,prog2,prog3将不会被执行。

makefile之伪目标的更多相关文章
- makefile中伪目标的理解
1. 我们知道Makefile中的语法是这样: target ... : prerequisites ... command - - 2. 假如编译两个文件可以这么写: a.o:a.c gcc -c ...
- Makefile的伪目标
1.Makefile伪目标的格式: .PHONY : cleanclean: rm xxxx 2.Makefile伪目标的作用: 第一种情况: 如果我们需要书写这样的一个规则:规则所定义的命令不是去创 ...
- 第三篇 makefile的伪目标
我们来思考一下makefile中的目标究竟是什么?实际上,在默认情况下: 1.make将makefile的目标认为是一个文件: 2.make解释器比较目标文件和依赖文件的新旧关系,决定是否 ...
- Makefile目标,伪目标,头文件自动依赖
目标 即我们最终要生成的文件,make默认生成第一个目标,注意 makefile中tab和空格不是一回事,规则使用tab缩进,编辑器不要设置诸如"将tab替换为空格之类的选项",目 ...
- makefile中的伪目标
伪目标就是总是被执行的目标,相对于目标来说,伪目标不会去考虑它的依赖的时间戳与自己时间戳的新旧关系,从而决定是否执行规则.伪目标格式: .PHONY:clean clean: -rm *.o 在mak ...
- Makefile伪目标
https://www.zybuluo.com/lishuhuakai/note/210174 本节我们讨论一个Makefile中的一个重要的特殊目标:伪目标. 伪目标是这样一个目标:它不代表一个真正 ...
- Makefile编写 三 伪目标的作用
本节我们讨论一个Makefile中的一个重要的特殊目标:伪目标. 伪目标是这样一个目标:它不代表一个真正的文件名,在执行make时可以指定这个目标来执行其所在规则定义的命令,有时我们也可以将一个伪目标 ...
- .PHONY makefile中的伪目标
我的理解: 拿clean举例,如果make完成后,自己另外定义一个名叫clean的文件,再执行make clean时,将不会执行rm命令. 为了避免出现这个问题,需要.PHONY: clean === ...
- Makefile 文件格式;makefile伪目标
Makefile包含 目标文件.依赖文件.可运行命令三部分. 每部分的基本格式例如以下: test: prog.o code.o gcc -o test prog.o code.o 当中 ...
随机推荐
- sql server 判断及增加列的默认值约束
IF NOT EXISTS ( SELECT name FROM sysobjects WHERE id = ( SELECT syscolumns.cdefault FROM sysobjects ...
- unity 实时间接光照 解决方案
https://www.youtube.com/watch?v=D7LjsabD4V4 这个很强 他runtime bake lightprobe 之后走assetbundle加载 Place Pro ...
- springmvc实现简单的拦截器
SpringMVC 中的Interceptor 拦截请求是通过HandlerInterceptor 来实现的.在SpringMVC 中定义一个Interceptor 非常简单,主要有两种方式,第一种方 ...
- JS 数字左补零函数
/* 左边自动补零 质朴长存法 by lifesinger */ function pad(num, n) { var len = num.toString().length; while(len & ...
- 元素的数据存储-jQuery.data()与.data()
jQuery提供的存储接口 jQuery.data( element, key, value ) //静态接口,存数据 jQuery.data( element, key ) //静态接口,取数据 . ...
- 云计算之路-阿里云上:启用Windows虚拟内存引发的CPU 100%故障
今天上午11:35~11:40左右,由于负载均衡中的两台云服务器CPU占用突然飚至100%,造成网站5分钟左右不能正常访问,请大家带来了麻烦,请谅解! (上图中红色曲线表示CPU占用) 经过分析,我们 ...
- atitit.微信支付的教程文档 attilax总结
atitit.微信支付的教程文档 attilax总结 1. 支付流程概览 1 2. 设置支付起始文件夹 host/app/paydir/ 1 3. 设置oauth验证域名 1 4. 測试文件夹 能 ...
- swagger 生成的接口文档,隐藏接口的某个参数
[问题描述] controller 中的处理请求的方法,有时候会添加一些额外的参数.比如下面代码中 UserVo: @PostMapping(value = "/add-office-par ...
- 一个编译可执行jar包 jar包中不包含resources下config.properties且可以读到config.properties文件且classpath中有当前路径的pom
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/20 ...
- MySQL外键的设置及作用
原文地址:http://www.php100.com/html/webkaifa/database/Mysql/2010/0830/5342.html 外键的作用: 保持数据一致性,完整性,主要目的是 ...

