linux常用makefile模板

版权声明:本文为博主原创文章,未经博主允许不得转载。 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

猜你喜欢

转载自blog.csdn.net/liuchen1206/article/details/49364289