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

📄 0520source_code_and_tarball.htm

📁 鸟哥LINUX 学习课本
💻 HTM
📖 第 1 页 / 共 5 页
字号:
make 这个令人关心的家伙啦!而 make 里面最需要注意的大概就是那个规则档案,也就是makefile 这个档案的语法啦!底下我们针对 makefile 的语法来加以介绍啰。</font></blockquote><hr width="100%"><a name="make_makefile"></a><img src="0520source_code_and_tarball_files/penguin-s.gif" nosave="" align="middle" height="23" width="17"><font color="#000099">make的基本语法与变量</font><blockquote><font color="#000000">make 的语法可是相当的多而复杂的,有兴趣的话可以到<a href="http://www.gnu.org/software/make/manual/html_mono/make.html" target="_blank">http://www.gnu.org/software/make/manual/html_mono/make.html</a>去查阅相关的说明,鸟哥这里仅列出一些基本的规则,重点在于让读者们未来在接触原始码时,不会太紧张啊!^_^好了,基本的 makefile 规则是这样的:</font><br> <table bgcolor="#000000" border="1" cols="1" width="500"><tbody><tr><td><b><font size="-1" color="#ffff00" face="SimSun">标的(target):目标文件1 目标文件2</font></b><br><b><font size="-1" color="#ffff00" face="SimSun">&lt;tab&gt;&#160;gcc -o 欲建立的执行文件 目标文件1 目标文件2</font></b></td></tr></tbody></table><font color="#000000"> </font><br><font color="#000000">那个标的(target)就是我们想要建立的信息,而目标文件就是具有相关性的object files ,那建立执行文件的语法就是以 &lt;tab&gt; 按键开头的那一行!特别给他留意喔,『</font><b><font color="#000066">命令列必须要以tab 按键作为开头</font></b><font color="#000000">』才行!他的规则基本上是这样的:</font><ul><li><b><font color="#000066">在 makefile 当中的 # 代表批注;</font></b></li><li><b><font color="#000066">&lt;tab&gt; 需要在命令行的第一个字符;</font></b></li><li><b><font color="#000066">标的(target)与相依档案(就是目标文件)之间需以『:』隔开。</font></b></li></ul><font color="#000000">同样的,我们以刚刚上一个小节的范例进一步说明,如果我想要有两个以上的执行动作时,例如下达一个指令就直接清除掉所有的目标文件与执行文件,该如何制作呢?</font><br> <table bgcolor="#000000" border="1" cols="1" width="500"><tbody><tr><td><font size="-1" color="#cccccc" face="SimSun"># 1. 先建立编译的规则</font><br><font size="-1" face="SimSun"><font color="#ffffff">[guest@testguest]# </font><b><font color="#ffff00">vi makefile</font></b></font><br><font size="-1" color="#ffff00" face="SimSun">main: main.ohaha.o sin_value.o cos_value.o</font><br><font size="-1" color="#ffff00" face="SimSun">&#160;&#160;&#160;&#160;&#160;&#160;&#160;gcc -o main main.o haha.o sin_value.o cos_value.o -lm</font><br><font size="-1" color="#ffff00" face="SimSun">clean:</font><br><font size="-1" color="#ffff00" face="SimSun">&#160;&#160;&#160;&#160;&#160;&#160;&#160;rm -f main main.o haha.o sin_value.o cos_value.o</font><br><font size="-1" color="#ffff00" face="SimSun"> </font><br><font size="-1" color="#cccccc" face="SimSun"># 2. 测试看看:</font><br><font size="-1" face="SimSun"><font color="#ffffff">[guest@testguest]# </font><b><font color="#ffff00">make clean</font></b></font><br><font size="-1" color="#ffffff" face="SimSun">rm -f mainmain.o haha.o sin_value.o cos_value.o</font></td></tr></tbody></table><font color="#000000"> </font><br><font color="#000000">如此一来,我们的 makefile 里面就具有至少两个标的,分别是main 与 clean ,如果我们想要建立 main 的话,输入『</font><b><font color="#000066">makemain</font></b><font color="#000000">』,如果想要清除有的没的,输入『</font><b><font color="#000066">makeclean</font></b><font color="#000000">』即可啊!而如果想要先清除目标文件再编译main 这个程序的话,就可以这样输入:『make clean main』,如下所示:</font><br> <table bgcolor="#000000" border="1" cols="1" width="500"><tbody><tr><td><font size="-1" face="SimSun"><font color="#ffffff">[guest@testguest]# </font><b><font color="#ffff00">make clean main</font></b></font><br><font size="-1" color="#ffffff" face="SimSun">rm -f mainmain.o haha.o sin_value.o cos_value.o</font><br><font size="-1" color="#ffffff" face="SimSun">cc&#160;&#160;&#160;-c -o main.o main.c</font><br><font size="-1" color="#ffffff" face="SimSun">cc&#160;&#160;&#160;-c -o haha.o haha.c</font><br><font size="-1" color="#ffffff" face="SimSun">cc&#160;&#160;&#160;-c -o sin_value.o sin_value.c</font><br><font size="-1" color="#ffffff" face="SimSun">cc&#160;&#160;&#160;-c -o cos_value.o cos_value.c</font><br><font size="-1" color="#ffffff" face="SimSun">gcc -o mainmain.o haha.o sin_value.o cos_value.o -lm</font></td></tr></tbody></table><font color="#000000"> </font><br><font color="#000000">这样就很清楚了吧!?但是,您是否会觉得,咦!makefile 里面怎么重复的数据这么多啊!呵呵!没错!所以我们可以再藉由 shellscript 那时学到的『变数』来更简化 makefile 喔:</font><br> <table bgcolor="#000000" border="1" cols="1" width="500"><tbody><tr><td><font size="-1" face="SimSun"><font color="#ffffff">[guest@testguest]# </font><b><font color="#ffff00">vi makefile</font></b></font><br><font size="-1" color="#ffff00" face="SimSun">LIBS = -lm</font><br><font size="-1" color="#ffff00" face="SimSun">OBJS = main.ohaha.o sin_value.o cos_value.o</font><br><font size="-1" color="#ffff00" face="SimSun">main: ${OBJS}</font><br><font size="-1" color="#ffff00" face="SimSun">&#160;&#160;&#160;&#160;&#160;&#160;&#160;gcc -o main ${OBJS} ${LIBS}</font><br><font size="-1" color="#ffff00" face="SimSun">clean:</font><br><font size="-1" color="#ffff00" face="SimSun">&#160;&#160;&#160;&#160;&#160;&#160;&#160;rm -f main ${OBJS}</font></td></tr></tbody></table><font color="#000000"> </font><br><font color="#000000">与 bash shell script 的语法有点不太相同,变量的基本语法为:</font><ol><li><b><font color="#000066">变量与变量内容以『=』隔开,同时两边可以具有空格;</font></b></li><li><b><font color="#000066">变量左边不可以有 &lt;tab&gt; ,例如上面范例的第一行LIBS 左边不可以是 &lt;tab&gt;;</font></b></li><li><b><font color="#000066">变量与变量内容在『=』两边不能具有『:』;</font></b></li><li><b><font color="#000066">在习惯上,变数最好是以『大写字母』为主;</font></b></li><li><b><font color="#000066">运用变量时,以 ${变量} 或 $(变量) 使用;</font></b></li><li><b><font color="#000066">在该 shell 的环境变量是可以被套用的,例如提到的CFLAGS 这个变数!</font></b></li><li><b><font color="#000066">在指令列模式也可以给予变量。</font></b></li></ol>由于<font color="#000066"> gcc 在进行编译的行为时,会主动的去读取 CFLAGS这个环境变量</font>,所以,您可以直接在 shell 定义出这个环境变量,也可以在makefile 档案里面去定义,更可以在指令列当中给予这个咚咚呢!例如:<br> <table bgcolor="#000000" border="1" cols="1" width="500"><tbody><tr><td><font size="-1" face="SimSun"><font color="#ffffff">[guest@testguest]# </font><b><font color="#ffff00">make clean main "CFLAGS=-Wall"</font></b></font><br><font size="-1" color="#ff6666" face="SimSun"># 这个动作在上make 进行编译时,会去取用 CFLAGS 的变量内容!</font></td></tr></tbody></table><font color="#000000"> </font><br><font color="#000000">也可以这样:</font><br> <table bgcolor="#000000" border="1" cols="1" width="500"><tbody><tr><td><font size="-1" face="SimSun"><font color="#ffffff">[guest@testguest]# </font><b><font color="#ffff00">vi makefile</font></b></font><br><font size="-1" color="#ffff00" face="SimSun">LIBS = -lm</font><br><font size="-1" color="#ffff00" face="SimSun">OBJS = main.ohaha.o sin_value.o cos_value.o</font><br><font size="-1" color="#ffff00" face="SimSun">CFLAGS = -Wall</font><br><font size="-1" color="#ffff00" face="SimSun">main: ${OBJS}</font><br><font size="-1" color="#ffff00" face="SimSun">&#160;&#160;&#160;&#160;&#160;&#160;&#160;gcc -o main ${OBJS} ${LIBS}</font><br><font size="-1" color="#ffff00" face="SimSun">clean:</font><br><font size="-1" color="#ffff00" face="SimSun">&#160;&#160;&#160;&#160;&#160;&#160;&#160;rm -f main ${OBJS}</font></td></tr></tbody></table><font color="#000000"> </font><br><font color="#000000">咦!我可以利用指令列进行环境变量的输入,也可以在档案内直接指定环境变量,那万一这个CFLAGS 的内容在指令列与 makefile 里面并不相同时,以那个方式输入的为主?呵呵!环境变量取用的规则是这样的:</font><ol><li><font color="#000066">make 指令列后面加上的环境变量为优先;</font></li><li><font color="#000066">makefile 里面指定的环境变量第二;</font></li><li><font color="#000066">shell 原本具有的环境变量第三。</font></li></ol><font color="#000000">此外,还有一些特殊的变量需要了解的喔:</font><ul><li><font color="#000066">$@:代表目前的标的(target)</font></li></ul><font color="#000000">所以我也可以将 makefile 改成:</font><br> <table bgcolor="#000000" border="1" cols="1" width="500"><tbody><tr><td><font size="-1" face="SimSu

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -