还有82天!
makefile
今天上课讲的是makefile,老师的ppt和例子实在太难懂,只好自己下课慢慢理解了,这里感谢点击打开链接,在这里面的例子比较简单,有些自己的理解。
看完他的博客之后回去看老师的代码,相当容易看懂,下面放代码:
如果一个工程有3个头文件,和8个C文件,我们为了完成前面所述的那三个规则,我们的Makefile应该是下面的这个样子的。
edit : main.o kbd.o command.o display.o /
insert.o search.o files.o utils.o
cc -o edit main.o kbd.o command.o display.o /
<span style="white-space:pre"> </span>insert.o search.o files.o utils.o
main.o : main.c defs.h
cc -c main.c
kbd.o : kbd.c defs.h command.h
cc -c kbd.c
command.o : command.c defs.h command.h
cc -c command.c
display.o : display.c defs.h buffer.h
cc -c display.c
insert.o : insert.c defs.h buffer.h
cc -c insert.c
search.o : search.c defs.h buffer.h
cc -c search.c
files.o : files.c defs.h buffer.h command.h
cc -c files.c
utils.o : utils.c defs.h
cc -c utils.c
clean :
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.o
edit : $(objects)
cc -o edit $(objects)
main.o : main.c defs.h
cc -c main.c
kbd.o : kbd.c defs.h command.h
cc -c kbd.c
command.o : command.c defs.h command.h
cc -c command.c
display.o : display.c defs.h buffer.h
cc -c display.c
insert.o : insert.c defs.h buffer.h
cc -c insert.c
search.o : search.c defs.h buffer.h
cc -c search.c
files.o : files.c defs.h buffer.h command.h
cc -c files.c
utils.o : utils.c defs.hangcc -c utils.c
clean :
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.o
edit : $(objects)
cc -o edit $(objects)
main.o : defs.h
kbd.o : defs.h command.h
command.o : defs.h command.h
display.o : defs.h buffer.h
insert.o : defs.h buffer.h
search.o : defs.h buffer.h
files.o : defs.h buffer.h command.h
utils.o : defs.h
.PHONY : clean
clean :
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.o
edit : $(objects)
cc -o edit $(objects)
$(objects) : defs.h
kbd.o command.o files.o : command.h
display.o insert.o search.o files.o : buffer.h
.PHONY : clean
clean :
rm edit $(objects)
取消重复的头文件</span></strong>
这里,更进一步优化,把重复头文件省略,同样的头文件的合并。
今天的makefile就到这里,lua目前进入了瓶颈,完全搞不懂啊。。。。