#支持 c,c++联合编译,多文件夹联合编译,随意增加源文件以及头文件等
DIR_BIN = .
DIR_INC = ./include
DIR_SRC = ./src
DIR_OBJ = ./obj
DIR_LIB = ./lib
#目标文件
TARGET = app
#目标路径
CUR_PATH = .
#获取所有c cpp文件
DIRS = $(shell find $(CUR_PATH) -maxdepth 10 -type d)
SRC = $(foreach dir, $(DIRS), $(wildcard $(dir)/*.cpp))
CSRC = $(foreach dir, $(DIRS), $(wildcard $(dir)/*.c))
#将所有.c,.cpp文件改为对应的.o文件
OBJS = $(patsubst %.cpp,${DIR_OBJ}/%.o,$(notdir ${SRC}))
COBJS = $(patsubst %.c,${DIR_OBJ}/%.o,$(notdir ${CSRC}))
#确认.c文件路径
VPATH = $(DIR_INC):$(DIR_SRC)
#文件生成路径
DIR_LIB = ./lib
BIN_TARGET = ${CUR_PATH}/${TARGET}
#编译工具链
ver = debug
#编译工具
CC = gcc -g
CXX = g++ -g
ARCH_CC = arm-fslc-linux-gcc
ARCH_CXX = arm-fslc-linux-g++
#依赖库及头文件
CFLAGS += -D _GNU_SOURCE -fgnu89-inline
LIBS += -L$(DIR_LIB)
INC += -I ./include \
-I ${DIR_SRC} \
-I ${SRC_DBUS} \
-I ${SRC_THRPOOL}
#gcc模式
ifeq ($(ver), debug)
all: ${OBJS} ${COBJS}
$(CXX) $(CFLAGS) -g -std=c++14 -Wall $^ -o ${BIN_TARGET} $(LIBS)
#编译所有源文件
${DIR_OBJ}/%.o:%.cpp
$(CXX) $(CFLAGS) $(INC) -g -std=c++14 -Wall -c $< -o $@
${DIR_OBJ}/%.o:%.c
$(CC) $(CFLAGS) $(INC) -c $< -o $@
#交叉编译模式
else
all: ${OBJS} ${COBJS}
$(ARCH_CXX) $(CFLAGS) $(INC) -std=c++14 -Wall $^ -o ${BIN_TARGET} $(LIBS)
#编译所有源文件
${DIR_OBJ}/%.o:%.cpp
$(ARCH_CXX) $(CFLAGS) $(INC) -std=c++14 -Wall -c $< -o $@
${DIR_OBJ}/%.o:%.c
$(ARCH_CC) $(INC) -std=c11 -Wall -c $< -o $@
endif
.PHONY: clean
clean:
rm -rf ${OBJS} ${COBJS} $(BIN_TARGET)