编写makefile的方法

来源:互联网 发布:南通东华软件 培训 编辑:程序博客网 时间:2024/04/27 21:54

编写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编译命令的使用方法可以参考其他资料。