Linux学习笔记(七)

还有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目前进入了瓶颈,完全搞不懂啊。。。。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值