版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/liuchen1206/article/details/49364289
1、编译动态库
###########################################################################
CXX=g++
CC=$(CXX)
LIST:= . ./include ./common
SOURCE_LIST:= . ./source ./common
VPATH:=$(foreach list, $(LIST), $(list))
#$(warning $(VPATH))
override CXXFLAGS+=-D__ENVIRONMENT_LINUX__
override CXXFLAGS+=-fPIC
override CXXFLAGS+=-g
override CXXFLAGS+=$(patsubst %,-I%,$(subst ,,$(VPATH)))
override CFLAGS+=$(CXXFLAGS)
override LDFLAGS+=-rdynamic
override MAKEFLAS+= -s
LIBS:= $(foreach list,$(SOURCE_LIST),./lib$(list).a)
###########################################################################
OBJECT:=../bin/libCommonLib.so
SOURCES:=$(foreach list,$(SOURCE_LIST),$(wildcard $(list)/*.cpp))
DELETE:=$(patsubst %.cpp,%.o,$(SOURCES))
DELETE+=$(patsubst %.cpp,%.d,$(SOURCES))
###########################################################################
$(OBJECT):$(patsubst %.cpp,%.o,$(SOURCES))
$(CXX) -shared -o $@ $(CXXFLAGS) $^
###########################################################################
%.d:%.cpp
$(CXX) -MM $(CXXFLAGS) $< > $@.$$$$; \
sed 's,\($*\)\.o[ :]*,\1.0 $@ : ,g' < $@.$$$$ > $@; \
rm -f $@.$$$$
-include $(SOUCRCES:.cpp=.d)
###########################################################################
.PHONY:clean
clean:
rm $(DELETE) -f
rm $(OBJECT) -f
2、编译静态库
#############################################################
# Makefile for static library.
# 编译静态链接库
#############################################################
#set your own environment option
CC = g++
CC_FLAG = -D_NOMNG -D_FILELINE
#static library use 'ar' command
AR = ar
#set your inc and lib
INC =
LIB = -lpthread -L./ -lsvrtool
#make target lib and relevant obj
PRG = libsvrtool.a
OBJ = Log.o
#all target
all:$(PRG)
$(PRG):$(OBJ)
${AR} rv ${PRG} $?
.SUFFIXES: .c .o .cpp
.cpp.o:
$(CC) $(CC_FLAG) $(INC) -c $*.cpp -o $*.o
.PRONY:clean
clean:
@echo "Removing linked and compiled files......"
rm -f $(OBJ) $(PRG)
3、可执行程序
###########################################################################
CXX=g++
CC=$(CXX)
###########################################################################
LIST:= ./include ../common_lib/include
SOURCE_LIST:= . ./source
OBJECT:=../bin/make_test
SOURCES:=$(foreach list,$(SOURCE_LIST),$(wildcard $(list)/*.cpp))
VPATH:=$(foreach list,$(LIST),$(list))
#$(warning $(VPATH))
DELETE:=$(patsubst %.cpp,%.o,$(SOURCES))
DELETE+=$(patsubst %.cpp,%.d,$(SOURCES))
override CXXFLAGS+=-D__ENVIRONMENT_LINUX__ -g
override CXXFLAGS+=$(patsubst %,-I%,$(subst ,,$(VPATH)))
override CFLAGS+=$(CXXFLAGS)
override LDFLAGS+=-rdynamic
override MAKEFLAGS += -s
############################################################################
$(OBJECT):$(patsubst %.cpp,%.o,$(SOURCES))
$(CXX) -o $@ $(CXXFLAGS) $(LDFLAGS) $^ -lrt -lpthread -I,-Bdynamic -lCommonLib
###########################################################################
%.d:%.cpp
$(CXX) -MM $(CXXFLAGS) $< > $@.$$$$; \
sed 's,\($*\)\.o[ :]*,\1.o $@ : ,g' < $@.$$$$ > $@; \
rm -f $@.$$$$
-include $(SOURCES:.cpp=.d)
###########################################################################
.PHONY:clean
clean:
rm $(DELETE) -f
rm $(OBJECT) -f