码迷,mamicode.com
首页 > 系统相关 > 详细

5.22上午 外教 linux 听力812

时间:2017-05-22 15:16:50      阅读:177      评论:0      收藏:0      [点我收藏+]

标签:targe   存在   隐式   原因   文件   技术   linux   访问   关键字   

技术分享

技术分享

 

技术分享

 

Makefile那些稀奇古怪的符号

这些稀奇古怪的符号是前面隐式规则中出现过,单独拎出来是因为我们会经常用到它们。         

 

这些符号也就是我们常说的自动变量:

 

$@ :规则中的目标集

 

$^ :规则中的所有先决条件

 

$< :表示规则中的第一个先决条件

 

 

 

再来说说$VAR$$VAR的区别:

 

makefile文件中的规则绝大部分都是使用shell命令来实现的,这里就涉及到了变量的使用,包括makefile中的变量和shell命令范畴内的变量。在makefile的规则命令行中使用$var就是在命令中引用makefile的变量,这里仅仅是读取makefile的变量然后扩展开,将其值作为参数传给了一个shell命令;而$$var是在访问一个shell命令内定义的变量,而非makefile的变量。如果某规则有nshell命令行构成,而相互之间没有用‘;‘‘\‘连接起来的话,就是相互之间没有关联的shell命令,相互之间也不能变量共享。

 

 

 

Makefile之伪目标

使用其原因一:避免和同名文件冲突

 

在现实中难免存在所定义的目标与所存在的目标是同名的,采用Makefile如何处理这种情况呢?Makefile中的假目标(phony target)可以解决这个问题。

 

假目标可以使用.PHONY关键字进行声明,对于假目标,可以想象,因为不依赖于某文件,make该目标的时候,其所在规则的命令都会被执行。

 

        

 

如果编写一个规则,并不产生目标文件,则其命令在每次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

 

5.22上午 外教 linux 听力812

标签:targe   存在   隐式   原因   文件   技术   linux   访问   关键字   

原文地址:http://www.cnblogs.com/bgd140201136/p/6889008.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!