在Makefile中的 ".PHONY "是做什么的?
来源:互联网 发布:js动态加载html 编辑:程序博客网 时间:2024/04/30 01:12
这称之为假象目的 (Phony Targets)
假设你的一个项目最后需要产生两个可执行文件。你的主要目标 是产生两个可执行文件,但这两个文件是相互独立的——如果一 个文件需要重建,并不影响另一个。你可以使用“假象目的”来 达到这种效果。一个假象目的跟一个正常的目的几乎是一样的, 只是这个目的文件是不存在的。因此, 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 知道它们都是假象目的。
假设你的一个项目最后需要产生两个可执行文件。你的主要目标 是产生两个可执行文件,但这两个文件是相互独立的——如果一 个文件需要重建,并不影响另一个。你可以使用“假象目的”来 达到这种效果。一个假象目的跟一个正常的目的几乎是一样的, 只是这个目的文件是不存在的。因此, 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 知道它们都是假象目的。
- 在Makefile中的 ".PHONY "是做什么的?
- 在Makefile中的 ".PHONY "是做什么的?
- Makefile中的PHONY 目标
- Makefile中的PHONY
- makefile中的.PHONY
- Makefile中的.PHONY
- makefile 中的PHONY
- makefile 中的PHONY
- makefile中的phony使用
- Makefile中的.PHONY
- Makefile 中的.PHONY
- makefile 中的PHONY
- 数据库中的触发器是用来做什么的?
- javascript中的美元符号$是做什么的?
- php中的 session_start()是做什么的?
- .PHONY makefile中的伪目标
- .PHONY makefile中的伪目标
- .PHONY makefile中的伪目标
- java中的垃圾回收机制
- javascript中子窗口与父窗口之间的值传递
- Mysql存储过程优化——使用临时表代替游标
- c++ find()
- PHPUnit系列
- 在Makefile中的 ".PHONY "是做什么的?
- .主键,外键和索引
- android布局之LinearLayout, layout_weight很有用
- 用C语言编写一个双链表,每个结点存储学生的编号以及姓名,遍历这个双链表,并将学号按照从小到大进行排序
- 找不到iis组件 windows组件没有iis WIndows组件中 没有Internet信息服务也能安装IIS
- 动态修改 控件属性 2011.07.21
- MySQL的经典用法(三)----海量数据统计处理,模拟物化视图
- 如何入门学习控制台编程
- Android权限列表permission说明