编译动态库的makefile模板文件:
#生成动态库的模板makefile
CC = gcc
CFLAGS = -Wall -O2
#指定头文件目录
INCLUDE_PATH = -I../include
#指定链接库所在目录
LINKLIB_PATH =
#指定要链接的库文件
LIBS =
LIBCFLAGS = $(CFLAGS) $(INCLUDE_PATH) $(LINKLIB_PATH) $(LIBS) -D_REENTRANT -fPIC
LIBSRCS := $(wildcard *.c)
LIBOBJS := $(patsubst %.c,%.o,$(LIBSRCS))
#编译生成的库文件名
BASENAME = libcmtools
LIBRARY = $(BASENAME).so.1.0.0
SONAME = $(BASENAME).so.1
LIBNAME = $(BASENAME).so
#目标生成的库文件名
APPLIB = cmtools
APPLIBSO = $(APPLIB).so
#目标库文件生成的目录
APPLIBDIR = ../lib
APPLIBNAME = lib$(APPLIBSO)
all:$(LIBRARY)
#直接注释下面两行的话,意味着不会目标生成的库文件
# cp $(LIBNAME) $(APPLIBDIR)/$(APPLIBNAME)
# cp $(LIBNAME) $(APPLIBDIR)/$(APPLIBSO)
$(LIBRARY):$(LIBOBJS)
$(CC) -shared -W1,-soname,$(SONAME) $(LIBOBJS) -o $@
ln -sf $@ $(LIBNAME)
ln -sf $@ $(SONAME)
$(LIBOBJS):%.o:%.c
$(CC) $(LIBCFLAGS) -c $< -o $@
.PHONY:clean distclean
clean:
rm -f $(LIBOBJS)
distclean:
rm -f $(LIBOBJS) $(LIBRARY) $(SONAME) $(LIBNAME) $(APPLIBDIR)/$(APPLIBNAME) $(APPLIBDIR)/$(APPLIBSO)
编译静态库makefile模板:
#目标库文件名
LIBA = libcmtools.a
AR = ar
CC = gcc
CFLAGS = -Wall -O2
#指定头文件目录
INCLUDE_PATH = -I../include
#指定链接库所在目录
LINKLIB_PATH =
#指定要链接的库文件
LIBS =
ALLCFLAGS = $(CFLAGS) $(INCLUDE_PATH) $(LINKLIB_PATH) $(LIBS) -D_REENTRANT -fPIC
COMPILE = $(CC) $(ALLFLAGS) -c
SRCS := $(wildcard *.c)
OBJS := $(patsubst %.c,%.o,$(SRCS))
all:$(LIBA)
$(LIBA):$(OBJS)
$(AR) cqs $(LIBA) $(OBJS)
%.o:%.c
$(COMPILE) $< -o $@
.PHONY:clean distclean
clean:
rm -f $(OBJS)
distclean:
rm -f $(OBJS) $(LIBA)
同时编译多目标文件,这个也是经常用到,比如:编译测试代码,可能会同时生产很多目标
#不是特别规范的模板
CC = gcc
CFLAGS = -Wall -O2 -Xlinker -zmuldefs
#指定头文件目录
INCLUDE_PATH = -I../include
#指定链接库所在目录
LINKLIB_PATH = -L../src
#指定要链接的库文件
LIBS = -lcmtools
LIBCFLAGS = $(CFLAGS) $(INCLUDE_PATH) $(LINKLIB_PATH) $(LIBS) -D_REENTRANT -fPIC
#LIBSRCS := $(wildcard *.c)
#LIBOBJS := $(patsubst %.c,%.o,$(LIBSRCS))
all:
#把需要生成的目标在此加入即可
gcc t_hash.c -o t_hash $(LIBCFLAGS)
gcc t_heap.c -o t_heap $(LIBCFLAGS)
.PHONY:clean distclean
clean:
#注意把新加入的目标加入到clean列表
rm -rf *.o t_hash t_heap
多个.c文件文件生成一个目标模板makefile:
APP = app
CC = gcc
CPPFLAGS =
LDFLAGS =
#指定头文件目录
INCLUDE_PATH =
#指定链接库所在目录
LINKLIB_PATH =
#指定要链接的库文件
LIBS =
CFLAGS = -Wall -ggdb3
COMPILE = $(CC) $(CPPFLAGS) $(CFLAGS) $(INCLUDE_PATH) $(LINKLIB_PATH) $(LIBS) -c
LINKCC = $(CC) $(LDFLAGS)
SRCS := $(wildcard *.c)
#DEPS := $(patsubst %.c,%.d,$(SRCS))
OBJS := $(patsubst %.c,%.o,$(SRCS))
all:$(APP)
$(APP):$(OBJS)
$(LINKCC) $(OBJS) -o $(APP)
#%.d:%.c
# $(CC) -MM $(CPPFLAGS) $< > $@
%.o:%.c
$(COMPILE) $< -o $@
.PHONY:clean
clean:
rm -f $(OBJS) $(APP)
explain:
@echo "The information represents in the program:"
@echo "Final executable name: $(APP)"
@echo "Source files: $(SRCS)"
@echo "Object files: $(OBJS)"
depend:$(DEPS)
@echo "Dependencies are now up-to-date"
-include $(DEPS)