VxWorks操作系统MakeFile(三)
版权申明:本文为水煮鱼为 水煮鱼@博客园 撰写,不得用于商业用途,如需摘用,请与水煮鱼联系。
Makefile的结构:
一般编译的步骤为:
1、将每一个单独的源代码文件首先编译成为目标文件。
2、通过链接器,将目标文件连接成为可执行文件。
由于本文只讨论vxworks中的makefile,因此本文主要以常用的gcc为例。
通过-c开关,可以使用gcc将源文件编译成为期望的目标文件。生成文件以.o为后缀名。然后通过命令gcc -o exec_filename *.o,将生成的目标文件连接成为可执行文件。在gcc中,生成的可执行文件以.out为后缀名。
对于一个多文件的项目,这些非常繁琐。但是GNU Make工具让一切都可以变得很简单。
GUN Make的输入是一个文本文件:makefile。在这个文件中,主要描述了目的文件是从那些依靠文件中产生的关联关系。根据文本中描述的关系,make通过检查磁盘上的文件,如果目的文件的时间戳比至少它一个依靠文件的时间戳旧的话,make工具将执行相应的命令,以更新目的文件。
一个makefile主要含有以下的规则:
:....
(tab)<command>
(tab)<command>
.
.
.
例:
====make file 开始====
myprog:foo.o bar.o
gcc foo.o bar.o -o myprog
foo.o: foo.c foo.h bar.h
gcc -c foo.c -o foo.o
bar.o: bar.c bar.h
gcc -c bar.c -o bar.o
====make file 结束====
这是一个非常典型的makefile。
make从最上面开始,把上面第一个目的, "myprog",作为它的主要目标。给出跪着说明只要文件"myprog"比文件"foo.o"或者"bar.o"中的任何一个旧,则下一行命令将会被执行。
但是在检查文件foo.o和bar.o的文件戳之前,它会往下查找那些把foo.o或者bar.o作为目标文件的规则,以此递归,直到找到最新的目标文件,并执行该目标文件下的命令。 从此可以看出,make工具通过这种递归查找最新时间戳的方式,保证当你修改任何代码的时候(可能是只有修改了一个源码文件,或者一个头文件),保证与之关联的文件都可以被编译。
当然,你必须保证你在makefile中写的编译规则,都是正确的,只列出了那些在源码文件中被包括的头文件。
下一部分中,将主要讲如何编写makefile文件。