⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 7.htm

📁 makefile文件详解
💻 HTM
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><title>20CN网络安全小组--makefile(7) </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(7)  <span style="font-size: 9pt">(阅览<font color="#FF0000">                <script src="http://www.20cn.net/cgi-bin/ns/count.cgi?id=20020801151209"></script>                </font>次)</span></p>              <p>makefile(7) <br><br> <br>作者:ermiao     发表时间:2002/07/09 09:18am<br> <br>标  题: 关于makefile(7) <br>2.6 函数 (Functions) <br>makefile 里的函数跟它的变量很相似——使用的时候,你用一个 $ 符号跟开括号,函 数名,空格后跟一列由逗号分隔的参数,最后 用关括号结束。例如,在 GNU Make 里 有一个叫 'wildcard' 的函 数,它有一个参数,功能是展开成一列所有符合由其参数 描述的文 件名,文件间以空格间隔。你可以像下面所示使用这个命令: <br>SOURCES = $(wildcard *.c) <br>这行会产生一个所有以 '.c' 结尾的文件的列表,然后存入变量 SOURCES 里。当然你不需要一定要把结果存入一个变量。 <br>另一个有用的函数是 patsubst ( patten substitude, 匹配替 换的缩写)函数。它 需要3个参数——第一个是一个需要匹配的 式样,第二个表示用什么来替换它,第三 个是一个需要被处理的 由空格分隔的字列。例如,处理那个经过上面定义后的变量, <br>OBJS = $(patsubst %.c,%.o,$(SOURCES)) <br>这行将处理所有在 SOURCES 字列中的字(一列文件名),如果它的 结尾是 '.c' ,就 用 '.o' 把 '.c' 取代。注意这里的 % 符号将匹 配一个或多个字符,而它每次所匹配 的字串叫做一个‘柄’(stem) 。 在第二个参数里, % 被解读成用第一参数所匹配的 那个柄。 <br>2.7 一个比较有效的 makefile <br>利用我们现在所学的,我们可以建立一个相当有效的 makefile 。 这个 makefile 可 以完成大部分我们需要的依靠检查,不用做太大 的改变就可直接用在大多数的项目里。 <br>首先我们需要一个基本的 makefile 来建我们的程序。我们可以让 它搜索当前目录,找到源码文件,并且假设它们都是属于我们的项 目的,放进一个叫 SOURCES 的变量。 这里如果也包含所有的 *.cc 文件,也许会更保险,因为源码文件可能是 C++ 码的。 SOURCES = $(wildcard *.c *.cc) 利用 patsubst ,我们可以由源码文件名产生目标文件名,我们需 要编译出这些目标 文件。如果我们的源码文件既有 .c 文件,也有 .cc 文件,我们需要使用相嵌的 patsubst 函数呼叫: <br>OBJS = $(patsubst %.c,%.o,$(patsubst %.cc,%.o,$(SOURCES))) <br>最里面一层 patsubst 的呼叫会对 .cc 文件进行后缀替代,产生的结 果被外层的 patsubst 呼叫处理,进行对 .c 文件后缀的替代。 <br>现在我们可以设立一个规则来建可执行文件: <br>myprog : $(OBJS) <br>gcc -o myprog $(OBJS) <br>进一步的规则不一定需要, gcc 已经知道怎么去生成目标文件 (object files) 。下面我们可以设定产生依靠信息的规则: <br>depends : $(SOURCES) <br>gcc -M $(SOURCES) &gt; depends <br>在这里如果一个叫 'depends' 的文件不存在,或任何一个源码文件 比一个已存在的 depends 文件新,那么一个 depends 文件会被生 成。depends 文件将会含有由 gcc 产生的关于源码文件的规则(注 意 -M 开关)。现在我们要让 make 把这些规则当做 makefile 档 的一部分。这里使用的技巧很像 C 语言中的 #include 系统——我 们要 求 make 把这个文件 include 到 makefile 里,如下: <br>include depends <br>GNU Make 看到这个,检查 'depends' 目的是否更新了,如果没有, 它用我们给它的命令重新产生 depends 档。然后它会把这组(新) 规则包含进来,继续处理最终目标 'myprog' 。当看到有关 myprog 的规则,它会检查所有的目标文件是否更新——利用 depends 文件 里的规则,当然这些规则现在已经是更新过的了。 <br>这个系统其实效率很低,因为每当一个源码文件被改动,所有的源码 文件都要被预处 理以产生一个新的 'depends' 文件。而且它也不是 100% 的安全,这是因为当一个 header 档被改动,依靠信息并不会 被更新。但就基本工作来说,它也算相当有用的 了。 <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 &copy;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 + -