gcc编译链接工具的使用
make工具的使用
理解make的工作原理
1. 编译链接器(gcc)
用编辑器 vi 编辑一下C源代码
#include<stdio.h>
int count =20;
int main(void)
{
int k;
int sum=0;
#ifdef DEBUG
printf("runing in debug mode\n");
#else
printf(" runing in no debug mode\n");
#endif
for(k=0;k<count;k++)
sum=sum+k;
printf("the sum is%d\n",sum);
}
将上述C代码保存至文件examm1.c,利用gcc生成执行文件
$ gcc -o exam1 exame1.c //编译链接成可执行程序exam1
$ ./exame1 //执行改程序
2. GNU make项目管理
在大型软件开发过程中,通常将系统分解为若干个模块,每个模块对应一个C源代码文件,由开发人员编写各自的模块,进过调试和单元测试后,最终将这些模块进行组装,生成最终的可执行程序或者函数库。
GNU make工具可很好地帮组我们完成这项工作。
假设某项目由以下模块组成,源代码分别是app.c,sum.c,mylib.h和app.c
// add.c
int add(int x,int y ){
return x+y;
}
// sum.c
int func(int count)
{
int sum=0;
int j;
for(j=0;j<=count;j++)
sum=sum+j;
return sum;
}
// mylib.h
#ifndef _DEMOLIB_API_H
#define _DEMOLIB_API_H
extern int add(int x,int y);
extern int func(int count);
#endif
// app.c
#include<stdio.h>
#include "mylib.h"
int main(void)
{
int val;
int x,y;
x=12;
y=18;
val=add(x,y);
printf("the mult of x and y is %d\n",val);
val=func(100);
printf("the sum is%d \n",val);
}
下面编写Makefile用于管理这些源代码的代码生成。Makefile的脚本如下:
app: app.o add.o sum.o
gcc -o app app.o add.o sum.o
app.o: app.c
gcc –c app.c
add.o:add.c
gcc -c add,c
sum.o:sum.c
gcc -c sum.c
clean:
rm -rf *.o
编译项目中的所有源代码
$ make app //app为所要产生的目标
若只修改app.c源代码,重新生成目标,观察有何不同
$ make app //APP为所要产生的目标
若需重新生成整个项目,可执行下列操作:
$ make clean //目标clean表示删除所有后最名为.o的文件
$ ls //观察是否将所有后最名为.o的文件删除
$ make app //重新生成整个项目app
3. 思考题
-
利用make工具进行项目管理有什么好处?
-
进一步研究make工具对变量和隐含规则的处理。