注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

还东国的博客

行之苟有恒,久久自芬芳

 
 
 

日志

 
 

makefile 学习 (一)  

2010-07-22 17:30:13|  分类: LINUX编程 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

这几天一直在学习MAKEFILE,又是看书,又是上网滴,华丽丽的开场,但愿也华丽丽的收场,可不要虎头蛇尾,让人搞笑。
开始写的是简单的,毕竟有一些底子,直接过了,看网上的资料说:MAKE命令寻找Makefile或 makefile文件,然后把第一个出现在文件中的目标设定为makefile的终极目标,啥叫终极目标,看MAKEFILE的手册,好不好?OK,我们接着讲。
设定好终极目标后,然后寻找其依赖项,如果这个目标文件不存在,或者其有部分依赖文件进行了修改,(编译器怎么判断修改,神,当然是看时间哪个新鲜了)就重新编译一个新滴出来。
这步也OK后,就遍历依赖的依赖,直到最终的源文件,啥是源文件,这个,好象我也不大清楚,可以看书么。书是人类进步的阶梯,找着什么是源文件,欢迎来电告诉我。
说了些官话,我们来说些真东西,我在用参变量和函数生成依赖项时,就下面这个:

%.o:%.c
 $(CC) $(CFLAGS) -c $< -o $@
%.o:%.cpp
 $(CPP) $(CFLAGS) -c $< -o $@ 

童鞋们注意咧:空格,TAB,啥意思捏,命令前为TAB,不管是目标还是命令后,都不要跟空格,OK,如果你想受虐,我就没办法啦。
 $< -o $@:这个东东,很是烦人,具体的意思是:前者代表规则的第一个依赖名称,而$@代表所有的目标文件。但是,一有但是,事儿就多,对吧,这里也是,需要注意滴部分来咧:
如果,假如的意思就是,如果,依赖文件是%.o:%.c形式,也就是使用了模式规则%,啥叫模式规则捏,童鞋们,伟大领袖教导我们,饭要一口口的吃,路要一步步的走,以后会介绍滴,要相信党,相信人民,相信资本主义一定会被社会主义代替。
接着说,废话太多了,如果采用了上述的形式,那么 $< -o $@的意思就是把依赖文件一个个滴取出来,然后一个个的变成对就的目标文件,OK,明白咧不?不明白,我明白咧。
接着我们还使用咧两个函数:
1. SOURCE=$(wildcard *.c *.cpp) :很简单,代表所有滴CPP,C文件并把他们统统介绍给SOURCE这个变量,或者说宏。
2. OBJS=$(patsubst %.c ,%.o,$(patsubst %.cpp,%.o,(SOURCE))):这个捏,是说把所有的C,CPP文件转成O文件。OK,不OK?

有一个东东我不太清楚,就是定义了一个TARGET=./helloworld,人家一直不明白滴是,怎么加了个./,最后成的目标文件里也没这个东东啊,你说是代表路径吧,也不是很能说得过去。算了吧,难得糊涂。

童鞋们,最后还有一个伪目标文件,就是童鞋们经常用滴clean,清除乱七八糟的东西。按手柴上讲,得这么定义一下:
.PHONY : clean
至于伪的有什么好处,可以看手柴嘛。
先写这么一点儿,明天给大家讲动静态库的MAKEFILE,OK,休息咧。

  评论这张
 
阅读(864)| 评论(4)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017