今天终于学会了编写makefile,使之可以编译目录下所有c\cpp文件。
编译多个c文件一般有两个功能,一个是每个c文件都有main函数,就是说每个c文件的可执行文件是独立的,各自是各自的;第二个是多个c文件用来编译成一个可执行文件。
首先说第一个,内容如下,这个makefile是为了编译opencv代码的。
CFLAGS= -g -O3 `pkg-config opencv --cflags`
LIBS = `pkg-config opencv --libs`
C_SRC = $(wildcard *.c)
C_OBJ = $(patsubst %c, %o, $(C_SRC))
CPP_SRC = $(wildcard *.cpp)
CPP_OBJ = $(patsubst %cpp, %o, $(CPP_SRC))
.PHONY:all clean
all:$(CPP_OBJ) $(C_OBJ)
.c.o:
gcc $(CFLAGS) -o $@ $< $(LIBS)
.cpp.o:
g++ $(CFLAGS) -o $@ $< $(LIBS)
clean:
rm *~ *.o -f
参考网址:http://forkhope.diandian.com/post/2012-10-12/40040828841 http://blog.csdn.net/jernymy/article/details/6401065
http://hi.baidu.com/zengzhaonong/item/f07c81e1da455210585dd89a
第二个是编译所有c文件,生成一个目标文件。有了上一个的基础,第二个目标的例子为
01 CC = gcc
02 LD = gcc
03 CFLAGS = -Wall -c -Dgliethttp -I../include -L lib_path
04 LDFLAGS = -lpthread
05
06 SRCS = $(wildcard *.c source/*.c)
07 OBJS = $(patsubst %c, %o, $(SRCS))
08 TARGET = gliethttp
09
10 .PHONY: all clean
11
12 all: $(TARGET)
13
14 $(TARGET): $(OBJS)
15 $(LD) $(LDFLAGS) -o $@ $^
16
17 %o: %c
18 $(CC) $(CFLAGS) -o $@ $<
19
20 clean:
21 rm -f *.o $(TARGET)
源地址 http://hi.baidu.com/zengzhaonong/item/aa5b5b4f143d80eb1e19bc9c