您的位置:首页 > 运维架构 > Linux

linux常用makefile模板

2015-10-23 17:47 393 查看
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: