源代码结构如下:
最终会在当前目录下生成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}