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

📄 5.htm

📁 makefile文件详解
💻 HTM
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><title>20CN网络安全小组--makefile(5) </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(5)  <span style="font-size: 9pt">(阅览<font color="#FF0000">                <script src="http://www.20cn.net/cgi-bin/ns/count.cgi?id=20020801151042"></script>                </font>次)</span></p>              <p>makefile(5) <br><br> <br>作者:ermiao     发表时间:2002/07/09 09:17am<br> <br>标  题: 关于makefile(5) <br>2.2 编写 make 规则 (Rules) <br>最明显的(也是最简单的)编写规则的方法是一个一个的查 看源码文件,把它们的目标文件做为目的,而C源码文件和被它 #include 的 header 档做为依靠文件。但是你 也要把其它被这些 header 档 #include 的 header 档也列为依靠文件,还有那些被包括的文件所包括的文件……然后你会发现要对越来越多的文件 进行管理,然后你的头发开始脱落,你的脾气开始变坏,你的脸 色变成菜色,你走在路上开始跟电线杆子 碰撞,终于你捣毁你的 电脑显示器,停止编程。到低有没有些容易点儿的方法呢? 当然有!向编译器要!在编译每一个源码文件的时候,它实在应 该知道应该包括什么样的 header 档。使用 gcc 的时候,用 -M 开关,它会为每一个你给它的C文件输出一个规则,把目标文件 做为目的,而这个C文件和所有应该被 #include 的 header 文 件将做为依靠文件。注意这个规则会加入所有 header 文件,包 括被角括号(`&lt;', `&gt;')和双引号(`"')所包围的文件。其实我们可以 相当肯定系统 header 档(比如 stdio.h, stdlib.h 等等)不会 被我们更改,如果你用 -MM 来代替 -M 传递给 gcc, 那些用角括 号包围的 header 档将不会被包括。(这会节省一些编译时间) 由 gcc 输出的规则不会含有命令部分;你可以自己写入你的命令 或者什么也不写,而 让 make 使用它的隐含的规则(参考下面的 2.4 节)。 <br>2.3 Makefile 变量 <br>上面提到 makefiles 里主要包含一些规则。它们包含的其它的东 西是变量定义。 makefile 里的变量就像一个环境变量(environment variable)。 事实上,环境变量在 make 过程中被解释成 make 的变量。这些 变量是大小写敏感的,一般使用大写字母。 它们可以从几乎任何 地方被引用,也可以被用来做很多事情,比如: <br>i) 贮存一个文件名列表。在上面的例子里,生成可执行文件的 规则包含一些目标文件 名做为依靠。在这个规则的命令行 里同样的那些文件被输送给 gcc 做为命令参数。如果在这 里使用一个变数来贮存所有的目标文件名,加入新的目标 文件会变的简单而且 <br>较不易出错。<br>ii) 贮存可执行文件名。如果你的项目被用在一个非 gcc 的系 统里,或者如果你想使用一个不同的编译器,你必须将所 有使用编译器的地方改成用新的编译器名。但是如 果使用一 个变量来代替编译器名,那么你只需要改变一个地方,其 它所有地方的命令名就都改变了。 <br>iii) 贮存编译器旗标。假设你想给你所有的编译命令传递一组 相同的选项(例 -Wall -O -g);如果你把这组选项存 入一个变量,那么你可以把这个变量放在所有 呼叫编译器 的地方。而当你要改变选项的时候,你只需在一个地方改 变这个变量的内 容。要设定一个变量,你只要在一行的开始写下这个变量的名字,后 面跟一个 = 号,后面 跟你要设定的这个变量的值。以后你要引用 这个变量,写一个 $ 符号,后面是围在括 号里的变量名。比如在 下面,我们把前面的 makefile 利用变量重写一遍: <br>=== makefile 开始 === <br>OBJS = foo.o bar.o <br>CC = gcc <br>CFLAGS = -Wall -O -g <br>myprog : $(OBJS) <br>$(CC) $(OBJS) -o myprog <br>foo.o : foo.c foo.h bar.h <br>$(CC) $(CFLAGS) -c foo.c -o foo.o <br>bar.o : bar.c bar.h <br>$(CC) $(CFLAGS) -c bar.c -o bar.o <br>=== makefile 结束 === <br>还有一些设定好的内部变量,它们根据每一个规则内容定义。三个 比较有用的变量是$@, $&lt; 和 $^ (这些变量不需要括号括住)。 $@ 扩展成当前规则的目的文件名, $&lt; 扩展成依靠列表中的第 一个依靠文件,而 $^ 扩展成整个依靠的列表(除掉了里面所有重 复的文件名)。利用这些变量,我们可以把上面的 makefile 写成: <br>=== makefile 开始 === <br>OBJS = foo.o bar.o <br>CC = gcc <br>CFLAGS = -Wall -O -g <br>myprog : $(OBJS) <br>$(CC) $^ -o $@ <br>foo.o : foo.c foo.h bar.h <br>$(CC) $(CFLAGS) -c $&lt; -o $@ <br>bar.o : bar.c bar.h <br>$(CC) $(CFLAGS) -c $&lt; -o $@ <br>=== makefile 结束 === <br>你可以用变量做许多其它的事情,特别是当你把它们和函数混合 使用的时候。如果需 要更进一步的了解,请参考 GNU Make 手册。 ('man make', 'man makefile') <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 + -