链接:
http://www.cnblogs.com/prettyshuang/p/5552328.html
http://blog.youkuaiyun.com/lzx_bupt/article/details/7988192
http://blog.163.com/shi_shun/blog/static/2370784920106198610771/
1、模板1:
项目中实际应用,具有通用性
1 # $< 第一个依赖文件
2 # $@ 目标文件
3 # $^ 所有依赖文件
4
5 #定义gcc
6 CC := gcc
7 LD := gcc
8 MKDIR:=mkdir
9
10 #定义各个目录
11 IDIR=include
12 ODIR=obj
13 EXEDIR=bin
14 SRCDIR=src
15
16 #定义各个flags
17 CCFLAGS = -g
18 CCFLAGS += -I$(IDIR)
19 CCFLAGS += -std=c99
20 CCFLAGS += -Wall
21 CCFLAGS += -fPIC
22 CCFLAGS += -D LINUX
23
24 #定义目标文件
25 _OBJ+=main.o
26 _OBJ+=int_sqrt.o
27 OBJ=$(patsubst %, $(ODIR)/%, $(_OBJ))
28
29 #生成可执行文件
30 test_5: $(OBJ)
31 $(LD) -o $(EXEDIR)/$@ $(ODIR)/int_sqrt.o $(ODIR)/main.o $(CCFLAGS)
32
33 #生成目标文件
34 $(ODIR)/%.o: $(SRCDIR)/%.c $(DEPS)
35 $(CC) -c -o $@ $< $(CCFLAGS)
36
37 .PHONY: clean
38 clean:
39 rm -rf $(ODIR)/* $(EXEDIR)/*
2、模板2:
生成可执行文件
######################################
#
######################################
#source file
#源文件,自动找所有.c和.cpp文件,并将目标定义为同名.o文件
SOURCE := $(wildcard *.c) $(wildcard *.cpp)
OBJS := $(patsubst %.c,%.o,$(patsubst %.cpp,%.o,$(SOURCE)))
#target you can change test to what you want
#目标文件名,输入任意你想要的执行文件名
TARGET := test
#compile and lib parameter
#编译参数
CC := gcc
LIBS :=
LDFLAGS :=
DEFINES :=
INCLUDE := -I.
CFLAGS := -g -Wall -O3 $(DEFINES) $(INCLUDE)
CXXFLAGS:= $(CFLAGS) -DHAVE_CONFIG_H
#i think you should do anything here
#下面的基本上不需要做任何改动了
.PHONY : everything objs clean veryclean rebuild
everything : $(TARGET)
all : $(TARGET)
objs : $(OBJS)
rebuild: veryclean everything
clean :
rm -fr *.so
rm -fr *.o
veryclean : clean
rm -fr $(TARGET)
$(TARGET) : $(OBJS)
$(CC) $(CXXFLAGS) -o $@ $(OBJS) $(LDFLAGS) $(LIBS)
3、模板3:
生成静态链接库
######################################
#
#
######################################
#target you can change test to what you want
#共享库文件名,lib*.a
TARGET := libtest.a
#compile and lib parameter
#编译参数
CC := gcc
AR = ar
RANLIB = ranlib
LIBS :=
LDFLAGS :=
DEFINES :=
INCLUDE := -I.
CFLAGS := -g -Wall -O3 $(DEFINES) $(INCLUDE)
CXXFLAGS:= $(CFLAGS) -DHAVE_CONFIG_H
#i think you should do anything here
#下面的基本上不需要做任何改动了
#source file
#源文件,自动找所有.c和.cpp文件,并将目标定义为同名.o文件
SOURCE := $(wildcard *.c) $(wildcard *.cpp)
OBJS := $(patsubst %.c,%.o,$(patsubst %.cpp,%.o,$(SOURCE)))
.PHONY : everything objs clean veryclean rebuild
everything : $(TARGET)
all : $(TARGET)
objs : $(OBJS)
rebuild: veryclean everything
clean :
rm -fr *.o
veryclean : clean
rm -fr $(TARGET)
$(TARGET) : $(OBJS)
$(AR) cru $(TARGET) $(OBJS)
$(RANLIB) $(TARGET)
4、模板4:
生成动态链接库
######################################
#
#
######################################
#target you can change test to what you want
#共享库文件名,lib*.so
TARGET := libtest.so
#compile and lib parameter
#编译参数
CC := gcc
LIBS :=
LDFLAGS :=
DEFINES :=
INCLUDE := -I.
CFLAGS := -g -Wall -O3 $(DEFINES) $(INCLUDE)
CXXFLAGS:= $(CFLAGS) -DHAVE_CONFIG_H
SHARE := -fPIC -shared -o
#i think you should do anything here
#下面的基本上不需要做任何改动了
#source file
#源文件,自动找所有.c和.cpp文件,并将目标定义为同名.o文件
SOURCE := $(wildcard *.c) $(wildcard *.cpp)
OBJS := $(patsubst %.c,%.o,$(patsubst %.cpp,%.o,$(SOURCE)))
.PHONY : everything objs clean veryclean rebuild
everything : $(TARGET)
all : $(TARGET)
objs : $(OBJS)
rebuild: veryclean everything
clean :
rm -fr *.o
veryclean : clean
rm -fr $(TARGET)
$(TARGET) : $(OBJS)
$(CC) $(CXXFLAGS) $(SHARE) $@ $(OBJS) $(LDFLAGS) $(LIBS)