📄 6.htm
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><title>20CN网络安全小组--makefile(6) </title><meta http-equiv="Content-Type" content="text/html; charset=gb2312"><meta name="keywords" content="黑客,安全,网络,编程,黑客软件,安全软件,hacker,UNIX,Linux,FreeBSD"><meta name="description" content="黑客,安全,网络,编程,黑客软件,安全软件,hacker,UNIX,Linux,FreeBSD"><STYLE type=text/css>A { font-size: 12px; color: 004d9c; TEXT-DECORATION: none}A:visited { TEXT-DECORATION: none}A:active { TEXT-DECORATION: none}A:hover { color: #0000FF; text-decoration: none}.9p { font-size: 12px }.10p { font-size: 10pt}.9pten { font-size: 9pt; font-family: "verdana, Helvetica, Times New Roman, sans-serif"}.textinfo { font-size: 10.5pt; font-family: "verdana, Helvetica, Times New Roman, 宋体, sans-serif"; line-height: 21px ;letter-spacing:}.code { font-size: 10pt; font-family: "Courier New, sans-serif"}</STYLE></head><body bgcolor="#FFFFFF" leftmargin="0" topmargin="4" marginwidth="0" marginheight="0"><div align="center"><table width="768" border="1" bordercolor="#FFFFFF" class="9p"> <tr> <td bordercolor="ffffff" colspan="2" bgcolor="ffffff" align="right"> <a href="http://www.20cn.net/aboutus.html">关于我们</a> | <a href="http://www.20cn.net/joinus.html">加入我们</a> | <a href="http://www.20cn.net/help.html">网站结构</a> | <a href="http://www.20cn.net/linkus.html">交换连接</a> | <a href="mailto:webmaster@20cn.com">联系我们</a> </td> </tr></table><table width="768" border="1" height="51" bordercolor="5296ff" class="9p"> <tr> <td height="43" bordercolor="ffffff" colspan="2" bgcolor="ffffff"> <table width="100%" bgcolor="ffffff" bordercolor="ffffff" cellpadding="0" cellspacing="0" border="0"> <tr> <td ><img src="http://www.20cn.net/images/logo.jpg"></td> <td width="%100" height="40" align="center"><img src="http://www.20cn.net/images/banner.gif"></td> </tr> </table> </td> </tr> <tr> <td width="559" height="23" align="center"> | <a href="http://www.20cn.net/ns/html/">最新文档</a> | <a href="http://www.20cn.net/ns/wz/">技术文摘</a> | <a href="http://www.20cn.net/ns/ld/">安全漏洞</a> | <a href="http://www.20cn.net/ns/cn/">菜鸟乐园</a> | <a href="http://www.20cn.net/ns/hk/">黑客进阶</a> | <a href="http://www.20cn.net/netdemon/">技术文库</a> | <a href="http://www.20cn.net/download/" target="_blank">软件下载</a> | <a href="http://www.20cn.net/club/" target="_blank">技术论坛</a> | </td> <td width="193" bgcolor="adcbef" height="23"> <div align="center"> <script language=JavaScript src="http://www.20cn.net/date.js"></script> </div> </td> </tr></table><!-- End Herder --> <table width="768" border="1" bordercolor="5296ff"> <tr> <td colspan="3" bordercolor="#FFFFFF"> <table width="100%" border="0" cellspacing="0" class="9p"> <tr> <td width="74%"> 您现在的位置 >> <a href="http://www.20cn.net/">返回首页</a></td> <td width="26%" align="center"> 文档发表时间:2002-08-01 </td> </table> </td> </tr> <tr valign="top"> <td colspan="3" bordercolor="#FFFFFF"> <table width="100%" border="0" cellpadding="0" cellspacing="1" bgcolor="#adcbef" bordercolor="#adcbef"> <tr bgcolor="#F7F7F7" valign="top"> <td class="9p"> <table border="0" cellpadding="0" cellspacing="10" width="100%"> <tr> <td class="textinfo"> <p>makefile(6) <span style="font-size: 9pt">(阅览<font color="#FF0000"> <script src="http://www.20cn.net/cgi-bin/ns/count.cgi?id=20020801151114"></script> </font>次)</span></p> <p>makefile(6) <br><br> <br>作者:ermiao 发表时间:2002/07/09 09:17am<br> <br>标 题: 关于makefile(6) <br>2.4 隐含规则 (Implicit Rules) <br>请注意,在上面的例子里,几个产生 .o 文件的命令都是一样的。 都是从 .c 文件和 相关文件里产生 .o 文件,这是一个标准的步 骤。其实 make 已经知道怎么做——它 有一些叫做隐含规则的内 置的规则,这些规则告诉它当你没有给出某些命令的时候, 应该 怎么办。如果你把生成 foo.o 和 bar.o 的命令从它们的规则中删除, make 将会查找它的隐含 规则,然后会找到一个适当的命令。它的命令会 使用一些变量,因此你可以按照你的 想法来设定它:它使用变量 CC 做为编译器(象我们在前面的例子),并且传递变量 CFLAGS (给 C 编译器,C++ 编译器用 CXXFLAGS ),CPPFLAGS ( C 预 处理器旗 标), TARGET_ARCH (现在不用考虑这个),然后它加 入旗标 '-c' ,后面跟变量 $< (第一个依靠名),然后是旗 标 '-o' 跟变量 $@ (目的文件名)。<br>一个C编译的 具体命令将 会是:$(CC) $(CFLAGS) $(CPPFLAGS) $(TARGET_ARCH) -c $< -o $@ 当然你可以按照你自己的需要来定义这些变量。这就是为什么用 gcc 的 -M 或 -MM 开 关输出的码可以直接用在一个 makefile 里。 2.5 假象目的 (Phony Targets) 假设你的一个项目最后需要产生两个可执行文件。你的主要目标 是产生两个可执行文 件,但这两个文件是相互独立的——如果一 个文件需要重建,并不影响另一个。你可 以使用“假象目的”来 达到这种效果。一个假象目的跟一个正常的目的几乎是一样 的, 只是这个目的文件是不存在的。因此, make 总是会假设它需要 被生成,当把它 的依赖文件更新后,就会执行它的规则里的命令 行。 如果在我们的 makefile 开始处输入: <br>all : exec1 exec2 其中 exec1 和 exec2 是我们做为目的的两个可执行文件。 make 把这个 'all' 做为 它的主要目的,每次执行时都会尝试把 'all' 更新。但既然这行规则里没有哪个命令 来作用在一个叫 'all' 的 实际文件(事实上 all 并不会在磁碟上实际产生),所以 这个规 则并不真的改变 'all' 的状态。可既然这个文件并不存在,所以 make 会尝试 更新 all 规则,因此就检查它的依靠 exec1, exec2 是否需要更新,如果需要,就把 它们更新,从而达到我们的目的。 假象目的也可以用来描述一组非预设的动作。例如,你想把所有由 make 产生的文件删 除,你可以在 makefile 里设立这样一个规则: <br>veryclean : <br>rm *.o <br>rm myprog <br>前提是没有其它的规则依靠这个 'veryclean' 目的,它将永远 不会被执行。但是,如果你明确的使用命令 'make veryclean' , make 会把这个目的做为它的主要目标,执行那些 rm 命令。如果你的磁碟上存在一个叫 veryclean 文件,会发生什么事?这 时因为在这个规则里 没有任何依靠文件,所以这个目的文件一定是 最新的了(所有的依靠文件都已经是最 新的了),所以既使用户明 确命令 make 重新产生它,也不会有任何事情发生。解决 方法是标 明所有的假象目的(用 .PHONY),这就告诉 make 不用检查它们 是否存在 于磁碟上,也不用查找任何隐含规则,直接假设指定的目 的需要被更新。在 makefile 里加入下面这行包含上面规则的规则: <br>..PHONY : veryclean <br>就可以了。注意,这是一个特殊的 make 规则,make 知道 .PHONY 是一个特殊目的, 当然你可以在它的依靠里加入你想用的任何假象 目的,而 make 知道它们都是假象目 的。 <br><br> <br> <br><br>--------------------------------------------------------------------------------<br> <br></p> <p align="right"><a href="javascript:history.go(-1)" class="textinfo">返回 </a></p> </td> </tr> </table> </td> </tr> </table> </td> </tr> </table> <!-- Start Fooder --><p align="center" class="9p">建议您使用<font face="Verdana, Arial, Helvetica, sans-serif">IE</font>浏览器<font color="#FF0000" face="Verdana, Tahoma, Times New Roman, 宋体, MS Sans Serif">800×600</font>以上分辩率浏览以获最佳效果<br><br><font face="Verdana, Arial, Helvetica, sans-serif">20CN</font>网络安全小组版权所有<br><font face="Verdana, Tahoma, Times New Roman, 宋体, MS Sans Serif">Copyright ©2000-2003 20CN Network Security Group. All Rights Reserved.</font><br>如有任何问题及建议请写信至<a href="mailto:webmaster@20cn.net"><font color="#000000" face="Verdana, Tahoma, Times New Roman, 宋体, MS Sans Serif">webmaster@20cn.net</font></a></p><p align="center" class="9p"><img src="http://www.20cn.net/images/powerd-4.4bsd.gif" border="0"></p><p align="center" class="9p"><script language="JavaScript">var urodz = new Date("DEC 31, 2000");var now = new Date();var ile = now.getTime() - urodz.getTime();var dni = Math.floor(ile / (1000 * 60 * 60 * 24)) + 1;if (dni > 0) document.write("建站第 " + dni + " 天")else document.write("建站第 " + dni + " 天");</script><br></p></div></body></html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -