Linux 批量编译目录下文件的Makefile

2011年02月27日 15:48    发布者:hikesoso2010
1.在存放.c文件的目录下编按如下方法编写Makefile文件:  

#Makefile start..  
CC := gcc #根据需要添加其它如XX := g++  
CFLAGS := -Wall -O -g #优化,输出调试信息,及所有警告  
TARGET :=argcv test hello unixio getuid #要编译的目标名,文件名去后缀的  
#下面开始一一编译了  
all:$(TARGET)  
@echo compileing...  
%.o:%.c  
$(CC) $(CFLAGS) -c $< #发现用-c和-o都是输出一样的,有点不明白  
clean:  
rm -rf  $(TARGET)  
#end Makefile  

2.执行make,输出结果:  
$ make  
gcc  -Wall -O -g   
argcv.c   -o argcv  
gcc  -Wall -O -g   
test.c   -o test  
gcc  -Wall -O -g   
hello.c   -o hello  
gcc  -Wall -O -g   
unixio.c   -o unixio  
gcc  -Wall -O -g   
getuid.c   -o getuid  

3.另外,如果这个目录是存放的一个项目的文件,所有的文件最终生成一个可执行文件,用下面的Makefile:  
CC = gcc  
LD = gcc  
CFLAGS = -Wall -c  
LDFLAGS = -lpthread #还可以加入INCLUDES和LIBS变量,视情况而定  
SRCS = $(wildcard *.c)  #SRCS的值就是当前面目录下面所有的以.c结尾的源文件  
OBJS = $(patsubst %c,%o,$(SRCS))  #SRCS目录下创建c文件相对的o文件  
TARGET = myapp   #最终链接生成的目标名  
.PHONY: all clean  
all: $(TARGET)  
$(TARGET): $(OBJS)  
$(LD) $(LDFLAGS) -o $@ $^  
%o: %c  
$(CC) $(CFLAGS) -o $@ $<  
clean:  
@rm -f *.o $(TARGET)  
编译当前Makefile所在目录下的所有.c文件  

执行  
make  
make clean

网友评论

cqzy6666 2011年03月01日
很好!!1
ncchengang 2011年03月01日
谢谢,