一、最简单写法:比如有f1.c f2.c main.c head.h
head.h里包含f1.c f2.c , main.c里include head.h
则Makefile最简单写法
test:f1.o f2.o main.o //这里test是执行文件
gcc f1.o f2.o main.o -o test
f1.o:f1.c
gcc -c f1.c -o f1.o
f2.o:f2.c
gcc -c f2.c -o f2.o
main.o:main.c
gcc -c main.c -o main.o
.PHONY:clean //创建伪目标 用来防止文件夹里有叫clean的文件
clean:
rm *.o test
自动变量
$* 不包含扩展名的目标文件名称
$+ 所有的依赖文件,以空格分开,并以出现的先后为序,可能 包含重复的依赖文件
$< 第一个依赖文件的名称
$? 所有时间戳比目标文件晚的的依赖文件,并以空格分开
$@ 目标文件的完整名称
$^ 所有不重复的目标依赖文件,以空格分开
$% 如果目标是归档成员,则该变量表示目标的归档成员名称
二、进阶写法
f1.c到f1.o可以自动生成不用写 上面可以简写成
OBJS=f1.o f2.o main.o
CC=gcc
CFLAGS=-Wall -O -g
test:$(OBJS)
$(CC) $(OBJS) -o test
.PHONY:clean
clean:
rm *.o test
三、进阶(多个文件夹)
OBJS=f1.o f2.o main.o
CC=gcc