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. 思考题

  1. 利用make工具进行项目管理有什么好处?

  2. 进一步研究make工具对变量和隐含规则的处理。