APPNAME = XXX
OBJDIR = build/
CC = g++
SYSCLUDE = -I ./include_linux
SYSTEMLIB = -ldl -lz -pthread
LIBPATH = -L./lib_x86
COMMON_LIB = $(LIBPATH) -lcurl -lssl -lcrypto -lsqlite3 -lcares
CODEDIR = $(filter-out %/$(OBJDIR),dfdll)
CPPPATH :=$(foreach subpath,$(CODEDIR),$(subpath))
VPATH = $(patsubst -IXXIMWXX,,$(CPPPATH))
HEADDIR = $(filter-out %/$(OBJDIR),$(shell find . -maxdepth 3 -type d))
CPPFILES =$(wildcard $(addsuffix /*.cpp,$(CODEDIR)))
CFILES =$(wildcard $(addsuffix /*.c,$(CODEDIR)))
DFILES = $(addprefix $(OBJDIR),$(notdir $(CPPFILES:.cpp=.d)))
LIBTYPE = $(shell uname -i)
RELEASEOBJ = $(patsubst %.cpp,$(OBJDIR)/%.o,$(notdir $(CPPFILES)))
DEBUGOBJ = $(patsubst %.cpp,$(OBJDIR)/%.dbg.o,$(notdir $(CPPFILES)))
FATALERR=XXIMWXX
INCLUDETMPFLAG:=$(foreach subpath,$(HEADDIR),-I $(subpath))
INCLUDEFLAG = $(patsubst -I$(FATALERR),,)
DEBUGFLAG = $(CC) -fPIC -c -w -rdynamic -g -D _DEBUG $(INCLUDEFLAG) $(SYSCLUDE)
RELEASEFLAG = $(CC) -fPIC -c -w -rdynamic $(INCLUDEFLAG) $(SYSCLUDE)
ifeq ($(LIBTYPE),aarch64)
LIBPATH = -L./lib_arrch
endif
ifeq ($(LIBTYPE),mips64)
LIBPATH = -L./lib_mips
endif
all : Release
Release : $(DFILES)
Release : $(RELEASEOBJ)
Release :
echo Release
$(CC) -shared -fPIC $(CFLAGS) $(BITFLAG) -o $(APPNAME) $(RELEASEOBJ) $(COMMON_LIB) $(SYSTEMLIB) -Wl,-Bsymbolic
Debug : $(DFILES)
Debug : $(DEBUGOBJ)
Debug :
echo Debug
$(CC) -shared -fPIC $(CFLAGS) $(BITFLAG) -o $(APPNAME) $(DEBUGOBJ) $(COMMON_LIB) $(SYSTEMLIB) -Wl,-Bsymbolic
$(DFILES): $(OBJDIR)%.d : %.cpp
@echo 正在分析文件:$<; mkdir -p $(OBJDIR);\
$(if $(shell $(CC) -MM $(INCLUDEFLAG) $<),echo $(OBJDIR)/$(shell $(CC) -MM $(INCLUDEFLAG) $<) > $@, $(error 分析文件:$(patsubst %.d,%.cpp,$@)失败)); \
echo ' '$(RELEASEFLAG) $< -o $(patsubst %/,$(OBJDIR)/,$(patsubst %.d,%.o,$@)) >>$@; \
echo $(patsubst %.o:,%.dbg.o:,$(OBJDIR)/$(shell $(CC) -MM $(INCLUDEFLAG) $<)) >>$@; \
echo ' '$(DEBUGFLAG) $< -o $(patsubst %/,$(OBJDIR)/,$(patsubst %.d,%.dbg.o,$@)) >>$@
ifneq ($(MAKECMDGOALS),clean)
-include $(DFILES)
endif
.PHONY:clean
clean:
rm -rf $(APPNAME) *.o *.d *.dbg.o $(OBJDIR)/