一、make工具和makefile文件的引入
当源码文件比较多的时候就不适合通过直接输入gcc命令来编译,这时候就需要自动化编译工具。
make:一般说GNU Make,是一个软件,用于将源代码文件编译为可执行文件的二进制文件,make工具主要用于完成自动化编译提高编译效率。make工具编译的时候需要makefile文件提供编译文件。
Makeflie:make工具所使用的文件,Makefile指明了编译规则。
二、编写C程序
编写一个小型的含有多个.c文件的工程项目。如一个简易的计算a+b的工程.
//main.c文件
#include <stdio.h>
#include "input.h"
#include "calcu.h"
int main(int *argc,char *argv)
{
int a,b,num;
input_int(&a,&b);
num=calcu(a,b);
printf("%d+%d=%d\r\n",a,b,num);
return 0;
}
//input.c文件
#include <stdio.h>
#include "input.h"
void input_int(int* a,int* b)
{
printf("请输入两个数据");
scanf("%d %d",a,b);
printf("\r\n");
}
//calcu.c文件
#inclue <stdio.h>
#include "calcu.h"
int calcu(int a,int b)
{
return a+b;
}
//input.h文件
#ifndef __INPUT__H
#define __INPUT__H
void input_init(int* a,int* b);
#endif
//calcu.h文件
#ifndef __CALCU__H
#define __CALCU__H
int calcu(int a,int b);
#endif
上述文件如果使用gcc编译器直接编译,在修改过一个文件后将需要重新编译整个工程文件,所以为了方便和提高编译效率我们需要使用make工具。
要想使用马可工具得先编写好MakeFile文件。
三、MakeFile语法
1.MakeFile规则格式
//如上面工程文件所示编写规则:
main:main.o input.o calcu.o
gcc -o main main.o input.o calcu.o
这条规则的目标是 main,main.0、input.o和 calcu.o 是生成 main 的依赖文件,如果要更新目标 main,就必须要先更新它的所有依赖文,如果依赖文件中的任何一个有更新,那么目标也必须更新,“更新”就是执行一遍规则中的命令列表。
命令列表中的每条命令必须以TAB键开始,不能使用空格!!!
make命令会为MakeFile中的每一个以TAB开始的命令创建一个Shell进程去执行。
main:main.o input.o calcu.o
gcc -o main main.o input.o calcu.o
main.o:main.c
gcc -c main.c
input.o:input.c
gcc -c input.c
calcu.o:calcu.c
gcc -c calcu.c
clean:
rm *.o
rm main