Makefile

需要知道的

gcc简单流程{
gcc -E main.c -o main.i //预处理,生成.i文件
gcc -S main.i -o main.s //编译,生成汇编文件.s
gcc -c main.s -o main.o //汇编生成目标文件.o
}
makefile框架:
target:dependencies //依赖关系
command //具体操作流程

make优点

在linux中,我们编译用到了gcc编译。
一般情况下,假如有一个main.c文件,我们可以gcc -o main main.c来对他编译,编译完我们就可以得到main的可执行文件。

这里的makefile的编写是:

1
2 main:main.c
3 < tab > gcc -o main main.c
这是最简单的一种方式

但是在项目中一般都是有很多很多的其他依赖文件,所以我们每一次gcc的量都很多,而且每一次编译都要gcc一下很麻烦,而且会很慢。但是我们编好makefile后我们只需要每次make一下就能完成,并且可以clean掉其他多余的过程文件,每次的修改,也只是编译修改的文件,所以速度也会快一点。

makefile

例子:
我们需要init.c display.c input.c main.c 生成main执行文件
我们把init.c,display.c,input.c中函数声明写在test.h头文件中,在.c文件中加上
1
2 main:main.o input.o init.o display.o
3 < tab >gcc -o main main.o input.o init.o display.o
4 input.o:input.c
5 < tab >gcc -o input.o input.c
6 init.o:init.c
7 < tab >gcc -o init.o init.c
8 display.o:display.c
9 < tab >gcc -o display.o display.c
10 clean:
11< tab >rm *.o
其中rm *.o删除所有.o文件

变量的使用与伪目标
我们可以定义一个变量并替换它,clean我们也不是要生成它,可以设置为伪目标:.PHONY:clean
1 CC = gcc
2 .PHONY:clean
3 main:main.o input.o init.o display.o
4 < tab >$ (CC) -o main main.o input.o init.o display.o
5 input.o:input.c
6 < tab >$ (CC) -o input.o input.c
7 init.o:init.c
8 < tab >$ (CC) -o init.o init.c
9 display.o:display.c
10 < tab >$ (CC) -o display.o display.c
11 clean:
12 < tab >rm *.o

可以在makefile中用#来注释
或者我们如果要生成多个main执行文件,例如mainmax与mainmin
Makefile