【makefile模板】makefile生成动态库模板

源代码结构如下:

最终会在当前目录下生成build目录

################################################################
# 设置编译选项、目标文件的生成位置
################################################################
# 编译器
CXX  = g++

# 编译选项
CXXFLAGS += -std=c++11

# 获取到所有的源文件
DIR1 = .
DIR2 = ./tool
DIR3 = ./util
SOURCES += $(wildcard ${DIR1}/*.cpp)
SOURCES += $(wildcard ${DIR2}/*.cpp)
SOURCES += $(wildcard ${DIR3}/*.cpp)

# 保存生成的 .o 文件的目标目录
ROOTDIR = build
OBJDIR	= ${ROOTDIR}/obj

# 需要生成的目标文件(不携带路径)
# OBJS	= $(patsubst %.cpp,%.o, ${notdir ${SOURCES}})
# 将生成的头文件放到指定目录下
OBJS	= $(patsubst %.cpp,${OBJDIR}/%.o, ${notdir ${SOURCES}})

# 目标文件名(库或者执行文件)
LIB_NAME		= main
TARGET_FILE		= ${ROOTDIR}/lib${LIB_NAME}.so

################################################################
# 编译生成目标文件、库文件/执行文件
################################################################
#开始编译
all: build_dir ${TARGET_FILE}

build_dir:
	@mkdir -pv ${ROOTDIR}
	@mkdir -pv ${OBJDIR}

${TARGET_FILE}:${OBJS}
	sudo ${CXX} -shared -o $@ $^

# 先将所有的源文件编译成 .o 文件
${OBJDIR}/%.o:${DIR1}/%.cpp
	sudo ${CXX} -fPIC -o $@ -c $< ${CXXFLAGS}
${OBJDIR}/%.o:${DIR2}/%.cpp
	sudo ${CXX} -fPIC -o $@ -c $< ${CXXFLAGS}
${OBJDIR}/%.o:${DIR3}/%.cpp
	sudo ${CXX} -fPIC -o $@ -c $< ${CXXFLAGS}


################################################################
# 伪目标/自定义函数
################################################################
.PHONY:clean
clean:
	@sudo rm -rf ${ROOTDIR} ${ROOTDIR}/${TARGET_FILE}

猜你喜欢

转载自blog.csdn.net/challenglistic/article/details/129639957