VxWorks操作系统MakeFile(三)

时间:2008-9-6 夜

版权申明:本文为水煮鱼为 水煮鱼@博客园 撰写,不得用于商业用途,如需摘用,请与水煮鱼联系。

 

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文件。

posted @ 2008-09-06 22:54  水煮 鱼  阅读(2815)  评论(2编辑  收藏  举报