根据《跟我写makefile》写出了下面的makefile文件:
object = main.o file1.o file2.o file3.o
CC = arm-linux-gcc
main: $(object)
$(CC)-o main $(object) -lpthread –Wall
main.o: main.c main.h file1.h file2.h file3.h
$(CC)-c main.c
file1.o:file1.c file1.h
$(CC)-c file1.c
file2.o: file2.c file2.h file1.h
$(CC)-c file2.c
file3.o: file3.c file3.h
$(CC)-c file3.c
.PHONY : clean
clean:
-rmmain $(object)
优化后的makefile:
#产生一个所有以 '.c' 结尾的文件的列表
SOURCES = $(wildcard *.c)
#匹配替换,有三个参数。第一个是一个需要匹配的式样,第二个表示用什么来替换它,第
#三个是一个需要被处理的由空格分隔的列表, 此处就是表示把文件列表SOURCES中所有
#的.c字符变成.o,形成一个新的文件列表,然后存入OBJS变量中。
OBJS = $(patsubst %.c, %.o, $(SOURCES))
CC = arm-linux-gcc
CFLAGS = -lpthread -Wall
TARGET = ./main
#把所有的.c文件编译成.o文件。 $<:扩展成依赖列表中的第一个依赖文件
#$@ :扩展成当前规则的目的文件名
%.o:%.c
$(CC)-c $< -o $@
$(TARGET) : $(OBJS)
$(CC) -o $(TARGET) $(OBJS) $(CFLAGS)
.PHONY : clean
clean:
-rmmain $(OBJS)
优化过程参考了转载的文档《makefile例子》:http://blog.csdn.net/autowanglei/article/details/11079625