Makefile 使用手记(1)
来源:互联网 发布:php doc转html 编辑:程序博客网 时间:2024/04/30 18:47
Makefile 使用手记【1】
最近做IoT 的gateway 程序,写了几个简单地段子之后,发现编译管理是个问题,分散在不同的文件夹里,编译、连接都是一个问题。于是打算用Makefile 管理。一方面,用Makefile管理起来比较方便,另一方面,以前经常看Makefile,总觉得人家的很复杂(linux kernel 里的makefile 还真的很复杂), 自己亲手写一遍或许就了解其中的细节了,以后看Makefile 也就不那么头疼了。BTW,Makefile 确实能让我对C&Compiler 有不少重新的认识,还是很有必要学好的。
我觉得**Makefile**比较好的地方在于,它比较适合管理比较大型的程序。一般,一个大型的程序包括了N个部分,每个大的部分就是一个文件夹,每个部分可能又包括了M个小的部分,如此下去。 如果没有一个自动编译管理的程序的话,人工几乎是不可能理清楚的。 其次,个人感觉Makefile很适合管理那些对移植性比较强的程序。
Makefile的结构
复杂的 Makefile 看上去非常的繁杂,都不知道从哪个地方开始。但是其实基本原理是一致的,对于Make本身来说,变量和目标 始终是它唯一关心的主题。对于一个无论有多复杂的Makefile 而言,最后一定是一群变量的集合和一群目标的集合。如下所示。
CC:=gccCFLAGS:= -Wall -L xx/xx/xxDESTDIR= abc def gcdSRCDIR=src1 src2 src3 goal1:$(dependent files) $(CC) $(CFLAGS) $^ $@goal2:$(dependent files) $(CC) $(CFLAGS) $^ $@ @echo .... @rm -rf ....
这个简单的Makefile中,主题就是两个part,
因此,Makefile的执行过程应该是先对文件内的变量进行展开,然后找到对应目标,开始对目标的依赖目标进行检查,依赖目标全部到位后,便开始执行目标下面的代码。例如,上面的makefile中,如果输入make goal1; 应该会对goal1所依赖的文件进行检查,全部到位后,开始执行指令
$(CC) $(CFLAGS) $^ $@....#第二行指令.....#第三行指令, and so on.
流程图如下所示
既然理清楚了Makefile的基本结构,那下面基本上就可以各个击破了。从变量的展开规则到依赖、执行目标生成。每一个过程都可以存在复杂的规则,隐藏规则 and 各种.. 不过,不忘初衷,定能搞定…
- Makefile 使用手记(1)
- xplanner使用手记(1)
- xplanner使用手记(1)
- Mysql使用手记1
- NumPy使用手记 (1)
- mina 使用手记 1
- DiskGenius使用手记1
- NumPy使用手记 (1)
- 使用手记(1)
- Python multiprocessing 使用手记[1] – 进程模型
- Python multiprocessing 使用手记[1] – 进程模型
- Ubuntu Server 16.04.1 LTS 使用手记
- CORBA/TAO使用手记1 -- C/S架构网络通信开发
- Opsive 的Third Person Controller使用手记(1)
- eVC使用手记
- PMD使用手记
- dotnetbar使用手记
- Subversion 使用手记
- 遗传算法入门(连载之九)
- Cocos2d-x结构学习(八)CCSize、CCPoint、CCTextureAtlas、FIX_POS、CC_PROPERTY_READONLY
- android 反射调用其他apk中的方法
- Android开发周报:Android全球份额达到81%
- linux如何查看内存使用情况
- Makefile 使用手记(1)
- c++友元函数与友元类
- 前端控件学习网站
- 双向链表
- mysql命令行备份数据库
- 判断是否URL的正则表达式【Java和javascript】字符串是否包含中文
- Contiki之makefile分析(续)
- js 字符串与二维数组间的转化
- MVC-Chart_WebGrid 显示漂亮chart