Makefile 理解(1)

最近因为需要了解bootloader的一些内容所以看顺便看了一下Mafefile的编写规则。当然了解的只是皮毛了,作为一个学习记录与总结 还是写一篇小文章吧。
作为我在正式工作后的第一次的写博客 也把在百度博客上的文章copy过来了, 当然那是在校时写得, 现在看来写的一般了,不过还是有些参考价值吧, 呵呵 写的差大家多多批评,指教。
呵呵 又说废话了。

先介绍一下两篇中文 文章 《跟我一起写Makefile》 《GNU make中文手册》 
我看的是第一篇文章,第二篇还没有来得及看,看似写的更好!以后有时间再看。
我写的就是一个读后感吧,做一个总结 呵呵。
在Linux下编程,都有看到Makefile吧,一个人能不能看懂Makefile也就说明了是否是合格的linux程序员,当然了能写Makefile怎能展示一个人在linux上完成大型项目的能力。我是没达到了,我现撑死也就是能够看懂Makefile了。
Makefile最重要的功能就是进行自动编译功能,linux内核,包括Android系统都是靠着Makefile来编译。大家知道一个源程序要最后变为可执行的程序要经过编译(compile)生成目标文件、 链接(link)将目标文件合成一个可执行文件。
OK 大家都知道Makefile用三个基本的条件
target ... : prerequisites ...
        command (一定是tab来做的空格)
        command
        .
        .
也就是我们说的目标 依赖 命令 却是Makefile就是这些东西了,不过真正用起来还是比较困难的。
最简单的:
main : main.o
        gcc -o main main.o
main.o : main.c
        gcc -c main.c
clean:
        rm -f mian.o
保存为Makefile(也可以保存为其他文件名用-f 来制定)。执行make命令会去找当前目录下得Makefile的第一个目标,根据依赖文件来执行命令,如果依赖文件找不到 则会向下查找看是否在另一个目标中去生成依赖文件,或者根据make命令的隐含规则去生成依赖文件。
当执行make clean 时候会将生成的目标文件 main.o 删除
以上的make 执行后默认执行main边也就是最终的目标,次目标依赖与main.o文件,而main.o在一开始是不存在的,所以去超找有没有以main.o作为目标的段,如果有次目标,就会根据依赖来执行命令,生成main.o,然后在执行main目标的的命令来生成这个目标文件。
其实make命令是很智能的, 他会去检测目标是否已经生成,如果应生成且依赖修改的时间早与目标生成时间就不去执行命令了,当然当依赖也是又目标生成是还会去递归查找直到查找到真正的 C C++ 文件看他们的修改时间来确定时候执行目标的命令。好像写的有点含糊,反正就是make比较智能,只有在修改源程序后在执行make才会有选择的执行一些命令,对于没有修改的源程序就不在重复执行命令。这个先不了解也木有关系。
上边说到了隐含规则 比如C C++源程序在执行make生成一个可以行文件时候会依赖很多目标文件(.o)而我得Makefile中只说了一览这些.o文件但是没有给这些文件一个生成的命令。make会根据一个默认的命令来生成这些.o文件。
这就是Makefile的核心, 其实难点是不在这里,难点是一些伪目标, 变量使用 ,以及一些函数, 知道了这些就可以知道整个工程的架构与流程(只要肯研究的话)。
最难得地方其实是 编译器(gcc /ld ....)的一些选项 天啊这几天被搞得晕晕的。
几个难点 再研究一下 以后再写了 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值