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 当中 ...
随机推荐
- checkbox复选框居中
选项框居中 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w ...
- (判断url文件大小)关于inputStream.available()方法获取下载文件的总大小
转自:http://hold-on.iteye.com/blog/1017449 如果用inputStream对象的available()方法获取流中可读取的数据大小,通常我们调用这个函数是在下载文件 ...
- ubuntu安装elasticSearch及插件
原文地址:http://www.niu12.com/article/18 前提 1.安装好Java1.8以上环境并配置好JAVA_HOME(elasticsearch运行环境) 2.node环境6.5 ...
- python修改和获取进程名字:setproctitle
参考: https://pypi.org/project/setproctitle/
- Flask 在 Debug 模式下初始化2次
请移步: http://blog.zengrong.net/post/2632.html https://stackoverflow.com/questions/9449101/how-to-stop ...
- Windows Server 2008 远程桌面连接拒绝
(1)远程连接的时候在本地用户名添加域名 现象:在Windows2008R2配置成域控制器前,还没有安装AD,管理员Admistrator以及新创建的用户(创建的时候将该用户加入远程桌面管理组),发现 ...
- idea 设置jetty进程jvm参数
/** * MyEclipse6.5通过Jetty跑Web应用时提示OutOfMemoryError: PermGen space的解决办法 * @see ---------------------- ...
- java匿名内部类之RocketMQ中的应用
匿名内部类在spring中没怎么见用,在RocketMQ中有大量的应用. 确实可以提高开发效率.这可能代表两种写代码的态度吧. 匿名内部类简单来说就是直接在函数中实现接口方法,不需要声明一个接口实现类 ...
- 转: 腾讯Bugly干货分享:Android应用性能评测调优
转:http://www.kuqin.com/shuoit/20150618/346693.html?utm_source=www.race604.com 前言 在智能手机App竞争越来越激烈的今天, ...
- jstl表达式引用文件
<script type="text/javascript" src="<c:url value="/resources/js/common/jqu ...

