将技术做到极致...
分类: LINUX
2014-06-17 15:55:29
这里有一个相对比较好用的makefile模板,用来编译动态库的。
#####################################################################
#
# Work Environment: Unix/Win32
#
######################################################
#
# Path to GNU Toolchain
#
TOOLS = arm-unknown-linux-gnu- //这里是你的交叉编译工具
#
# Tools used to build the library
#
CC = $(TOOLS)gcc
CPP = $(TOOLS)g++
AR = $(TOOLS)ar
REMOVE = rm -f
COPY = cp -f
ifdef DEBUG
LIBDBG = _debug
else
LIBDBG =
endif
LIBNAME = libxxxi$(LIBDBG).a
LIBNAME_SHARED = libxxx$(LIBDBG).so
LIBSONAME = libxxx$(LIBDBG).so
# Source, Include and Build directories
SRCDIR = ./src //源文件路径
INCDIR = ./inc -I../api/inc //头文件路径
RELDIR = ./build
OBJDIR = ./build
VPATH = $(SRCDIR)
#####################################################################
# Rules for building source files
#
#Compiler flags
CFLAGS = -Wall -Wno-comment -c -fPIC
CFLAGS += -D_MAKE_ARM_LINUX_ -DMAKE_VIKING
CFLAGS += -I. -I $(INCDIR)
# Check if debug or release build
ifndef DEBUG
CFLAGS += -Os
else
CFLAGS += -O0 -g3 -D_DEBUG //-O0不优化,-g gdb调试
endif
####################################################################
# Source file list
#
SRC=$(wildcard $(VPATH)/*.c)
CPPSRC=$(wildcard $(VPATH)/*.cpp)
# Define all object files.
COBJ = $(patsubst $(VPATH)/%.c,%.o, $(SRC))
CPPOBJ += $(patsubst $(VPATH)/%.cpp,%.o, $(CPPSRC))
#DEPS = $(addprefix $(OBJDIR)/, $(patsubst %.o,%.d, $(COBJ)))
# Default target.
default: all
all: $(LIBNAME)
$(LIBNAME): copyfiles $(COBJ) $(CPPOBJ) buildlib package
# Compile: create object files from C source files.
$(COBJ): %.o : %.c
@echo "Compiling..."
$(CC) $(CFLAGS) $< -o $(OBJDIR)/$@
# Compile: create object files from CPP source files.
$(CPPOBJ): %.o : %.cpp
@echo "Compiling..."
$(CPP) $(CFLAGS) $< -o $(OBJDIR)/$@
depend: $(subst .o,.deps,$(COBJ)$(CPPOBJ))
%.deps: %.c
$(CC) $(CFLAGS) -MM $< > $(OBJDIR)/$@
buildlib:
@echo "Building Library... $(LIBNAME)"
$(AR) r $(OBJDIR)/$(LIBNAME) $(addprefix $(OBJDIR)/, $(COBJ) $(CPPOBJ))
$(CC) -shared -Wl,-soname,$(LIBSONAME) -o $(OBJDIR)/$(LIBNAME_SHARED) $(addprefix $(OBJDIR)/, $(COBJ) $(CPPOBJ)) -lc
copyfiles:
@echo "Copying Files"
@echo $(DEPS)
# cp -f ../ARM/inc/hyctypes.h ./inc/
package:
@echo "Creating Release Package... $(LIBNAME)"
@rm -f ReleasePackage/*
@cp -f build/*.a ReleasePackage/
@cp -f build/*.so* ReleasePackage/
@cp -f inc/xxx.h ./ReleasePackage/
@cp -f inc/xxxxxx.h ./ReleasePackage/
clean:
@rm -f ReleasePackage/*
@rm -f build/*