1.介绍
make命令执行的时候一定需要一个Makefile文件,通过这个Makefile告诉make命令需要怎么样的去编译和链接程序。make命令会自动智能地根据当前的文件修改的情况来确定哪些文件需要重编译,从而自己编译所需要的文件和链接目标程序。
2.Makefile规则
target... : prerequisites ...
command
...
...
注意:command和定格是一个Tab键(这是规定)
- target:是目标文件,即生成的文件,可以是Object File,也可以是执行文件,也可以是标签。
- prerequisites:要生成那个target所需要的文件或是目标,是一个文件的依赖关系,也就是说,target这一个或多个的目标文件依赖于prerequisites中的文件。
- command:也就是make需要执行的命令。(任意的Shell命令)
注意:make会比较targets文件和prerequisites文件的修改日期,如果prerequisites文件的日期要比targets文件的日期要新,或者target不存在的话,那么make就会执行command。
3.举例
(1)add.h文件
int add(int, int);
(2)add.c文件
#include"add.h"
int add(int a, int b){
return a + b;
}
(3)minus.h文件
int minus(int,int);
(4)minus.c文件
#include"minus.h"
int minus(int a, int b){
return a - b;
}
新建Makefile文件;
第一版Makefile
main: main.c add.o minus.o
gcc -Wall -o main main.c add.o minus.o
add.o: add.c add.h
gcc -Wall -c add.c -I ./
minus.o: minus.c minus.h
gcc -Wall -c minus.c -I ./
clean:
rm -rf *.o main
第二版 替换的内容前加“$”符号,并用括号括起来:
OBJ = main.c add.o minus.o
CC = gcc
main: $(OBJ)
$(CC) -Wall -o main $(OBJ)
add.o: add.c add.h
$(CC) -Wall -c add.c -I ./
minus.o: minus.c minus.h
$(CC) -Wall -c minus.c -I ./
clean:
rm -rf *.o main