读书人

编撰makefile的方法

发布时间: 2013-09-25 11:02:59 作者: rapoo

编写makefile的方法

编写makefile的一般方法

在这里通过编写一个简单的makefile实例,和大家交流学习编写makefile的方法

(1) 首先在程序员的心中必须知道源程序有几个模块构成

在此实例中源程序有3模块构成,分别是头文件 tou.h ,函数fun.c ,主函数main.c

(2) 编写程序的各个模块

1) 编写头文件

在此实例中头文件tou.h中包含了标准库库函数#include<stdio.h>

和要使用的函数的外部声明extern int add(int a,int b);

注意:以后要用到的所有库函数的头文件都写在这里,以后编写程序要添加库函数或者自定义的头文件都可以写在这里,方便省事。

2) 编写函数fun.c ,此函数实现的是两个数的加法运算

#include"tou.h"

int add(inta,int b)

{

return a + b;

}

注意:在此函数中fun.c 依赖tou.h这个头文件,弄清这个依赖关系后,为接下来编译工作的进行解决不小的麻烦

(3) 编写主函数 main.c

#include"tou.h"

int main()

{

inta=2,b=3;

a=add(a,b);

printf("%d\n",a);

return 0;

}

(4)以上三步完成了编写makefile的基础工作,这为编写makefile打下了基础

首先要理解gcc的编译流程

(1)预处理.预处理器将对源文件预处理

(2)编译.gcc将c文件编译成汇编文件,生成.S文件。

(3)汇编。将汇编语言文件汇编,生成目标文件.o文件

(4)连接。ld将目标文件和外部符号进行连接,得到一个可执行二进制文件

接下来要理解的就是makefile中的依赖关系,我们的目标是产生目标文件all,就是将文件所有的后缀名为.c文件,通过gcc编译命令,生成.o文件 ,再让所有的.O正确连接生成可执行文件。如果理解了这些我们的任务就完成了一大半。

all: main.o fun.o

gcc main.o fun.o -o all

可执行文件all 依赖由main.c和fun.c生成的main.o和fun.o文件

main.o: main.c fun.c tou.h

gcc -c main.c

main.o文件的生成又依赖main.c、fun.c和tou.h这三个文件

fun.o: tou.h

gcc -c fun.c

fun.o文件的生成又依赖tou.h这个文件

接下来的工作就是有关调试的了,如果程序的所有模块在编译额过程中出现了错误,需要清除已经产生文件就需要clean这个命令了,所以下面可以这样写

.PHONY:clean

clean:

rm-f *.o

将上述内容由上及下组合起来就组成了一个完整的makefile

all: main.o fun.o

gcc main.o fun.o -o all

main.o: main.c fun.c tou.h

gcc -c main.c

fun.o: tou.h

gcc -c fun.c

.PHONY:clean

clean:

rm-f *.o

以上就是编写makefile的过程,接下来的事情就是使用makefile了。

使用makefile

(1) 将main.c、fun.c和tou.h三个源程序文件和makefile放在同一个文件夹xuexi中,从终端中进入此文件,运行makefile即可产生可执行文件all,执行 all 即可,即./all

(2) 如果程序出现错误,可以使用clean命令清除产生的所有的.0文件,再执行步骤一即可

还有一些更好的编写makefile的方法,就是使用含参数的命令编写makefile,这里就不在多说了。还有gcc编译命令的使用方法可以参考其他资料。

读书人网 >编程

热点推荐