Linux学习笔记(七)

来源:互联网 发布:李天生sql server 2008 编辑:程序博客网 时间:2024/05/22 22:29

还有82天!

makefile

今天上课讲的是makefile,老师的ppt和例子实在太难懂,只好自己下课慢慢理解了,这里感谢点击打开链接,在这里面的例子比较简单,有些自己的理解。

看完他的博客之后回去看老师的代码,相当容易看懂,下面放代码:


如果一个工程有3个头文件,和8个C文件,我们为了完成前面所述的那三个规则,我们的Makefile应该是下面的这个样子的。edit : main.o kbd.o command.o display.o /    insert.o search.o files.o utils.occ -o edit main.o kbd.o command.o display.o /<span style="white-space:pre"></span>insert.o search.o files.o utils.omain.o : main.c defs.hcc -c main.ckbd.o : kbd.c defs.h command.hcc -c kbd.ccommand.o : command.c defs.h command.hcc -c command.cdisplay.o : display.c defs.h buffer.hcc -c display.cinsert.o : insert.c defs.h buffer.hcc -c insert.csearch.o : search.c defs.h buffer.hcc -c search.cfiles.o : files.c defs.h buffer.h command.hcc -c files.cutils.o : utils.c defs.hcc -c utils.cclean :rm edit main.o kbd.o command.o display.o /   insert.o search.o files.o utils.o      说明:反斜杠(/)是换行符的意思。这里要说明一点的是,clean不是一个文件,它只不过是一个动作名字,有点像C语言中的lable一样,其冒号后什么也没有,那么,make就不会自动去找文件的依赖性,也就不会自动执行其后所定义的命令。要执行其后的命令,就要在make命令后明显得指出这个lable的名字。这样的方法非常有用,我们可以在一个makefile中定义不用的编译或是和编译无关的命令,比如程序的打包,程序的备份,等等

这里新建如下几个文件:


然后在makefile文件中添加以上代码,代码的含义可以去参考点击打开链接

完成之后,执行make指令,就得到 了如下:


这样,makefile的任务就完成了,接下来对以上代码进行优化:

<strong><span style="font-size:24px;">objects = main.o kbd.o command.o display.o /  insert.o search.o files.o utils.oedit : $(objects)cc -o edit $(objects)main.o : main.c defs.hcc -c main.ckbd.o : kbd.c defs.h command.hcc -c kbd.ccommand.o : command.c defs.h command.hcc -c command.cdisplay.o : display.c defs.h buffer.hcc -c display.cinsert.o : insert.c defs.h buffer.hcc -c insert.csearch.o : search.c defs.h buffer.hcc -c search.cfiles.o : files.c defs.h buffer.h command.hcc -c files.cutils.o : utils.c defs.hangcc -c utils.cclean :rm edit $(objects)</span></strong>

这里用objects代替了所有创建的.o文件,减少了代码量,

下面在进一步优化:

<span style="font-size:24px;"><strong>objects = main.o kbd.o command.o display.o /  insert.o search.o files.o utils.oedit : $(objects)cc -o edit $(objects)main.o : defs.hkbd.o : defs.h command.hcommand.o : defs.h command.hdisplay.o : defs.h buffer.hinsert.o : defs.h buffer.hsearch.o : defs.h buffer.hfiles.o : defs.h buffer.h command.hutils.o : defs.h.PHONY : cleanclean :rm edit $(objects)说明:这种方法,也就是make的“隐晦规则”。上面文件内容中,“.PHONY”表示,clean是个伪目标文件。</strong></span>
这里的隐晦规则,代替了.c文件,更快的减少了代码量

最后,更加一步优化:

<strong><span style="font-size:24px;">objects = main.o kbd.o command.o display.o /  insert.o search.o files.o utils.oedit : $(objects)cc -o edit $(objects)$(objects) : defs.hkbd.o command.o files.o : command.hdisplay.o insert.o search.o files.o : buffer.h.PHONY : cleanclean :rm edit $(objects)取消重复的头文件</span></strong>
这里,更进一步优化,把重复头文件省略,同样的头文件的合并。

今天的makefile就到这里,lua目前进入了瓶颈,完全搞不懂啊。。。。



0 0
原创粉丝点击