您的位置:首页 > 其它

关于编写Makefile的一些总结

2009-09-29 15:20 246 查看
对于从事Unix下c开发的人员来说,Makefile并不陌生,用make来开发和编译程序的确非常方便,但是要想写出一个完美的Makefile文档并不是想象的那么简单,因为往往一个软件的Makefile文档内容非常多,需要考虑到得方面也比较多,下面我用一些非常简单的例子来简要的说明一下通常Makefile的编写方法。
例如:现在已经编好了几个文档a.h a.c b.h b.c c.h c.c main.c
a.h[/b]
#ifndef A_H
#define A_H
void A();
#endif
a.c[/b]
#include<stdio.h>
void a()
{
printf("This is the a!\n");
}
b.h[/b]
#ifndef B_H
#define B_H
void B();
#endif
b.c[/b]
#include<stdio.h>
void b()
{
printf("This is the b!\n");
}
c.h[/b]
#ifndef C_H
#define C_H
void c();
#endif
c.c[/b]
#include<stdio.h>
void c()
{
printf("This is the c!\n");
}
main.c[/b]
#include<stdio.h>
#include<a.h>
#include<b.h>
#include<c.h>
int main()
{
a();
b();
c();
return 0;
}
那么我们的makefile文档应该这样编写:
test: main.o a.o b.o c.o ç test为要生成文件名,”:”后面的是生成test所依赖的文件;
[tab]gcc main.o a.o b.o -o test
main.o: main.c
[tab]gcc -c main.c
a.o: a.c a.h ç生成a.o所依赖的文件是a.c a.h;
[tab]gcc -c a.c
b.o: b.c b.h
[tab]gcc -c b.c
c.o: c.c c.h
[tab]gcc -c b.c
clean:
[tab]rm -rf *o test ç执行clean命令时所执行的动作;
需要注意的是,命令之前必须有一个[tab]键的间隔,否则会报错。
比如把第三行行首的[tab]去掉则出现以下结果:
makefile:3: *** missing separator. Stop. ç提示第三行出错
以上工作完成之后,就可以通过执行make这一个命令来完成以上4个源文件的编译连接过程,这就是其方便之处。过程如下:
[root@localhost test]# ls
a.c a.h b.c b.h c.c c.h main.c makefile ç执行make之前;
[root@localhost test]# make
gcc -c main.c -o main.o
gcc -c a.c -o a.o
gcc -c b.c -o b.o
gcc -c c.c -o c.o
gcc main.o a.o b.o c.o -o test
[root@localhost test]# ls
a.c a.h a.o b.c b.h b.o c.c c.h c.o main.c main.o makefile test ç执行之后;
经过上面的步骤,就生成一个可执行文件test,make命令自动读取文件makefile的内容,然后根据其内容的要求有步骤地编译makefile文件中涉及到的所有源程序,此时只需执行一次make命令就达到目的了,然后执行生成的test出现以下结果:
[root@localhost test]# ./test
This is the a!
This is the b!
This is the c!
也就是说,这个test命令执行一次相当于同时输出三个源程序a.c b.c c.c的结果,这更加显现出makefile文件的高效性。删除编译产生的文件也很方便,只需执行make clean命令就行了。
如:
[root@localhost test]# ls
a.c a.h a.o b.c b.h b.o c.c c.h c.o main.c main.o makefile test
[root@localhost test]# make clean
rm -fr *.o test
[root@localhost test]# ls
a.c a.h b.c b.h c.c c.h main.c makefile
makefile文件用途非常广,在linux系统下,各种软件的源码包(*.tar,*.tar.gz ,*.tar.bz2)都包含有不同的makefile文件,在安装源码包时,主要步骤如下:
tar jxvf test.tar.bz2
cd test
./configure
make ç 这个步骤是比不可少的;
make install综上所述,Makefile文件在linux下的程序开发中是必不可少的,因为它的存在可以程序员减少相当大的工作量,所以学习Makefile文件的编写在程序开发中也是很重要的。以上所举得例子虽然都是比较简单的,有些内容还没有总结到,但是主要的步骤基本一样,大的程序中Makefile文件内容比较复杂,是因为其涉及的源程序比较多,其基本的组织结构都是非常相似的,需要平时多看,多积累才能很好的掌握Makefile的编写。本文出自 “开源之星” 博客,请务必保留此出处http://kaiyuan.blog.51cto.com/930309/208501
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: