makefile优化

来源:互联网 发布:右下角没有网络按钮 编辑:程序博客网 时间:2024/05/12 10:34

根据《跟我写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


原创粉丝点击