通过一个范例说明make是如何工作的。
main.c
#include<stdio.h>
#include"g_a.h"
#include"g_b.h"
int main(int argc, char **argv)
{
printf("a = %d\n",a);
printf("b = %d\n",b);
return 0;
}
g_a.c
int a = 10;
g_a.h
extern int a;
g_b.c
int b = 20;
g_b.h
extern int b;
Makefile
target : main.o g_a.o g_b.o
gcc -o target main.o g_a.o g_b.o
main.o : main.c
gcc -c main.c
g_a.o : g_a.c
gcc -c g_a.c
g_b.o : g_b.c
gcc -c g_b.c
注意看执行make时的输出。
不修改任何内容,输出目标文件已经是最新的了。
修改变量a为30,,注意执行make时输出的内容。
在书写makefile文件时,依赖文件这里好像不写h文件也可以,或许是c文件里面已经包含h文件了。
从以上输出的结果,我们可以理解这句话了。
考虑到makefile的书写规则里面,是支持多个目标的,所以想到了以下的书写方式:
target : main.o g_a.o g_b.o
gcc -o target main.o g_a.o g_b.o
main.o g_a.o g_b.o : main.c g_a.c g_b.c
gcc -c main.c
gcc -c g_a.c
gcc -c g_b.c
执行以后是可以的。
参考:https://seisman.github.io/how-to-write-makefile/overview.html