之前在看国嵌的视频的时候也接触过makefile,但是好多东西就是这样学过之后就忘记了,根本原因就是自己不会总结或者说自己没有总结,所以做了很多无用功,一味的去深究一些无关痛痒的东西。扯远了,废话不多说,为了分解uboot,我踏上了学习makefile的道路,步入正题!
一、
makefile的组成
更为详细的描述,也就是下面的格式:
target ... : prerequisites ...
<tab 键>command
...
...
针对这个格式,给出一个例子相信有助于了解:
hello:a.o b.o c.o d.o
gcc a.ob.o c.o d.o –o hello
a.o: a.c
gcc -c a.c
b.o: b.c
gcc -c b.c
c.o: c.c
gcc -c c.c
d.o: d.c
gcc -c d.c
.PHONY:clean
Clean:
Rm –f hello a.o b.o c.o d.o
对于上述makefile有几个知识点。.PHONY是表示伪目标,伪目标就是指那些没有任何依赖只有执行命令的目标,接下来,我们还可以使用变量来指定makefile。
还是上面那个例子:
Object = a.o b.o c.o d.o
hello:$(Object)
gcc $(Object)–o hello
a.o: a.c
gcc -c a.c
b.o: b.c
gcc -c b.c
c.o: c.c
gcc -c c.c
d.o: d.c
gcc -c d.c
.PHONY:clean
Clean:
Rm –f hello $(Object)
这里的变量的引用类似于引进C语言里面的宏命令,从而可以很方便的对编译规则进行修改
这只是对makefile初步的学习,给出下面一张图表
Makefile的组成
1、显式规则。说明了如何生成一个或多的的目标文件。
2、隐晦规则。可以让我们比较粗糙地简略地书写 Makefile ,这是由 make 所支持的,对于现阶段的我来说了解即可。
3、变量定义。在 Makefile 中我们要定义一系列的变量,变量一般都是字符串,之前就说过了,这个有点C 语言中的宏,当 Makefile 被执行时,其中的变量都会被扩展到相应的引用位置 上。
4、文件指示。其包括了三个部分,一个是在一个 Makefile 中引用另一个 Makefile。
5、注释。makefile 中只有行注释,和 UNIX 的 Shell 脚本一样,其注释是用“#”字符,这 个就像 C中的“//” 一样。如果你要在你的Makefile 中使用“#”字符,可以用反斜框 进行转义,如:“\#”。
Makefile初步学习就到这里了,以后有机会就继续学吧,接下来就是解剖make_config了。
待续。。