Chinaunix首页 | 论坛 | 博客
  • 博客访问: 149657
  • 博文数量: 54
  • 博客积分: 2517
  • 博客等级: 少校
  • 技术积分: 540
  • 用 户 组: 普通用户
  • 注册时间: 2009-09-13 18:52
文章分类
文章存档

2011年(2)

2010年(11)

2009年(41)

我的朋友

分类: LINUX

2009-09-14 13:08:18

这称之为假象目的   (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   知道它们都是假象目的。

阅读(945) | 评论(0) | 转发(0) |
0

上一篇:USB控制器Inventra

下一篇:DirectFB初探1

给主人留下些什么吧!~~