mirror of
https://gitee.com/TarsCloud/TarsCpp.git
synced 2024-12-22 22:16:38 +08:00
248 lines
7.0 KiB
Plaintext
248 lines
7.0 KiB
Plaintext
|
||
# -------------------------------------------------------------------------------
|
||
|
||
TARS_PATH :=/usr/local/tars/cpp
|
||
# !!如果业务要使用OPENSSL,那么请在业务makefile中添加定义 TARS_SSL := 1
|
||
# # # !!必须放在include /usr/local/tars/makefile.tars之前,因为本文件要引用TARS_SSL!
|
||
|
||
#-------------------------------------------------------------------------------
|
||
|
||
CC = gcc
|
||
CXX = g++
|
||
CFLAGS += -std=c++11 -g -O2 -Wno-deprecated -Wall
|
||
|
||
#-------------------------------------------------------------------------------
|
||
|
||
TARS2CPP := ${TARS_PATH}/tools/tars2cpp ${TARS2CPP_FLAG}
|
||
PROTO2TARS := ${TARS_PATH}/tools/pb2tarscpp
|
||
|
||
#-------------------------------------------------------------------------------
|
||
|
||
TARS_SRC := $(wildcard *.tars)
|
||
TARS_H := $(patsubst %.tars,%.h, $(TARS_SRC))
|
||
|
||
PB_SRC := $(wildcard *.proto)
|
||
PB_H := $(patsubst %.proto,%.pb.h, $(PB_SRC))
|
||
PB_TARS_H := $(patsubst %.proto,%.tars.h, $(PB_SRC))
|
||
PB_CPP := $(patsubst %.proto,%.pb.cc, $(PB_SRC))
|
||
PB_OBJ := $(patsubst %.proto,%.pb.o, $(PB_SRC))
|
||
|
||
ifneq ($(PB_SRC),)
|
||
LIB += -lprotobuf
|
||
endif
|
||
|
||
LOCAL_SRC += $(sort $(wildcard *.cpp *.c) $(PB_CPP))
|
||
|
||
LOCAL_OBJ += $(patsubst %.cpp,%.o, $(patsubst %.cc,%.o, $(LOCAL_SRC)))
|
||
|
||
DEP_FILE := $(foreach obj, $(LOCAL_OBJ), $(dir $(obj)).$(basename $(notdir $(obj))).d)
|
||
|
||
#-------------------------------------------------------------------------------
|
||
|
||
MYSQL_INC += -I/usr/local/mysql/include/mysql -I/usr/local/mysql/include -I/usr/include/mysql
|
||
MYSQL_LIB_DIR += -L/usr/local/mysql/lib/mysql -L/usr/local/mysql/lib -L/usr/lib/mysql
|
||
LIB_DIR += ${MYSQL_LIB_DIR}
|
||
INC_DIR += ${MYSQL_INC}
|
||
|
||
ifneq ($(_USE_OPENTRACKING), 0)
|
||
ifneq ($(_USE_OPENTRACKING), )
|
||
OPENTRACKING_INC += -I/usr/local/include
|
||
OPENTRACKING_LIB_DIR += -L/usr/local/lib
|
||
LIB_DIR += ${OPENTRACKING_LIB_DIR}
|
||
INC_DIR += ${OPENTRACKING_INC}
|
||
endif
|
||
endif
|
||
|
||
|
||
|
||
INCLUDE += -I${TARS_PATH}/include -I./ ${INC_DIR}
|
||
LIB += -L${TARS_PATH}/lib -ltarsservant -ltarsparse -ltarsutil -lpthread ${LIB_DIR}
|
||
|
||
ifneq ($(TARS_SSL), 0)
|
||
ifneq ($(TARS_SSL), )
|
||
#业务编译
|
||
CFLAGS += -DTARS_SSL=1
|
||
LIB += -lssl -lcrypto
|
||
endif
|
||
endif
|
||
|
||
ifneq ($(TARS_HTTP2), 0)
|
||
ifneq ($(TARS_HTTP2), )
|
||
#业务编译
|
||
CFLAGS += -DTARS_HTTP2=1
|
||
LIB += -lnghttp2
|
||
endif
|
||
endif
|
||
|
||
ifneq ($(_USE_OPENTRACKING), 0)
|
||
ifneq ($(_USE_OPENTRACKING), )
|
||
#业务编译
|
||
CFLAGS += -D_USE_OPENTRACKING=1
|
||
LIB += -lopentracing -lzipkin_opentracing -lzipkin -lcurl
|
||
endif
|
||
endif
|
||
|
||
#-----------------------------------------------------------------------------
|
||
|
||
TARGET := $(strip $(TARGET))
|
||
IS_LIB := F
|
||
|
||
|
||
ifeq ($(SUFFIX),.a)
|
||
IS_LIB := T
|
||
endif
|
||
|
||
ifeq ($(SUFFIX),.so)
|
||
IS_LIB := T
|
||
endif
|
||
|
||
#-------------------------------------------------------------------------------
|
||
|
||
all : $(PB_H) $(TARS_H) $(LOCAL_OBJ) $(TARGET) FORSTRIP
|
||
|
||
#-------------------------------------------------------------------------------
|
||
ifeq ($(IS_LIB),T)
|
||
|
||
$(filter %.a,$(TARGET)) : $(LOCAL_OBJ) $(REMOTE_OBJ)
|
||
ar r $@ $(LOCAL_OBJ)
|
||
|
||
$(filter %.so,$(TARGET)) : $(LOCAL_OBJ) $(REMOTE_OBJ)
|
||
$(CC) $(LFLAGS) -shared -o $@ $(LOCAL_OBJ) $(LIB)
|
||
|
||
$(filter-out %.so %.a,$(TARGET)) : $(LOCAL_OBJ) $(REMOTE_OBJ)
|
||
$(CXX) $(CFLAGS) -o $@ $^ $(INCLUDE) $(LIB)
|
||
|
||
FORSTRIP:$(TARGET)
|
||
ifeq ($(STRIP_FLAG),Y)
|
||
@strip $(TARGET)
|
||
endif
|
||
|
||
else
|
||
|
||
$(filter %.a,$(TARGET)) : $(LOCAL_OBJ) $(REMOTE_OBJ)
|
||
ar r $@ $(LOCAL_OBJ)
|
||
|
||
$(filter %.so,$(TARGET)) : $(LOCAL_OBJ) $(REMOTE_OBJ)
|
||
$(CC) $(LFLAGS) -shared -o $@ $(LOCAL_OBJ) $(LIB)
|
||
|
||
$(filter-out %.so %.a,$(TARGET)) : $(LOCAL_OBJ) $(REMOTE_OBJ)
|
||
$(CXX) $(CFLAGS) -o $@ $^ $(INCLUDE) $(LIB)
|
||
|
||
FORSTRIP:$(TARGET)
|
||
ifeq ($(STRIP_FLAG),Y)
|
||
@strip $(TARGET)
|
||
endif
|
||
|
||
endif
|
||
|
||
#----------------------------------------------------------------------------------
|
||
|
||
copyfile = if test -z "$(APP)" || test -z "$(TARGET)"; then \
|
||
echo "['APP' or 'TARGET' option is empty.]"; exit 1; \
|
||
else \
|
||
if test ! -d $(2); then \
|
||
echo "[No such dir:$(2), now we create it.]";\
|
||
mkdir -p $(2);\
|
||
fi; \
|
||
echo "[Copy file $(1) -> $(2)]"; \
|
||
cp -v $(1) $(2); \
|
||
fi;
|
||
#----------------------------------------------------------------------------------
|
||
|
||
$(PB_H) : $(PB_SRC)
|
||
rm -vf $(PB_H) $(PB_CPP)
|
||
protoc --plugin=protoc-gen-custom=${PROTO2TARS} --custom_out=./ ${PB_SRC} --cpp_out=./
|
||
|
||
#ifneq ($(TARS_SRC),)
|
||
$(TARS_H) : $(TARS_SRC)
|
||
@echo "tars2cpp ${TARS2CPP_FLAG} "
|
||
rm -vf $(TARS_H)
|
||
@echo "tars2cpp ${TARS2CPP_FLAG} "
|
||
$(TARS2CPP) ${TARS2CPP_FLAG} $(TARS_SRC)
|
||
|
||
#endif
|
||
#----------------------------------------------------------------------------------
|
||
|
||
tar: $(TARGET) $(CONFIG)
|
||
@if [ -d $(TARGET)_tmp_dir ]; then \
|
||
echo "dir has exist:$(TARGET)_tmp_dir, abort."; \
|
||
exit 1; \
|
||
else \
|
||
mkdir $(TARGET)_tmp_dir $(TARGET)_tmp_dir/$(TARGET);\
|
||
cp -rf $(TARGET) $(CONFIG) $(TARGET)_tmp_dir/$(TARGET)/; \
|
||
cd $(TARGET)_tmp_dir; tar --exclude=".svn" --exclude="_svn" -czvf $(TARGET).tgz $(TARGET)/; cd ..; \
|
||
if [ -f "$(TARGET).tgz" ]; then \
|
||
mv -vf $(TARGET).tgz $(TARGET).`date +%Y%m%d%H%M%S`.tgz; \
|
||
fi; \
|
||
mv $(TARGET)_tmp_dir/$(TARGET).tgz ./; \
|
||
rm -rf $(TARGET)_tmp_dir; \
|
||
echo "tar cvfz $(TARGET).tgz ..."; \
|
||
fi
|
||
|
||
HELP += $(HELP_TAR)
|
||
|
||
ifneq ($(TARS_SRC),)
|
||
|
||
SERVER_NAME := $(TARGET)
|
||
SERVER_DIR := /home/tarsproto/$(APP)/$(SERVER_NAME)
|
||
RELEASE_TARS += $(TARS_SRC) $(TARS_H)
|
||
|
||
release: $(TARS_H)
|
||
@$(call copyfile, $(RELEASE_TARS) [Mm]akefile , $(SERVER_DIR))
|
||
echo "INCLUDE += -I$(SERVER_DIR)" > $(SERVER_DIR)/$(SERVER_NAME).mk;
|
||
|
||
HELP += $(HELP_RELEASE)
|
||
endif
|
||
#----------------------------------------------------------------------------------
|
||
|
||
clean:
|
||
rm -vf $(LOCAL_OBJ) $(TARS_H) $(TARGET) $(TARGETS) ${CLEANFILE} .*.d.tmp gmon.out
|
||
|
||
cleanall:
|
||
rm -vf $(LOCAL_OBJ) $(PB_TARS_H) $(TARS_H) $(PB_H) $(PB_CPP) $(TARGET) $(TARGETS) $(DEP_FILE) ${CLEANFILE} *.o .*.d.tmp .*.d gmon.out
|
||
rm -vf $(TARGET)*.tgz
|
||
|
||
HELP += $(HELP_CLEAN)
|
||
HELP += $(HELP_CLEANALL)
|
||
|
||
ifneq ($(DEP_FILE),)
|
||
-include $(DEP_FILE)
|
||
endif
|
||
|
||
HELP_RELEASE = "\n\e[1;33mrelease\e[0m:\t[copy '\e[1;32m$(TARS_SRC) $(TARS_H)\e[0m' -> '/home/tarsproto/$(APP)/$(TARGET)']"
|
||
HELP_CLEAN = "\n\e[1;33mclean\e[0m:\t\t[remove $(LOCAL_OBJ) $(TARGET)]"
|
||
HELP_CLEANALL = "\n\e[1;33mcleanall\e[0m:\t[clean & rm .*.d]"
|
||
HELP_TAR = "\n\e[1;33mtar\e[0m:\t\t[will do 'tar $(TARGET).tgz $(RELEASE_FILE)']"
|
||
|
||
help:
|
||
@echo -e $(HELP)"\n"
|
||
|
||
#----------------------------------------------------------------------------------
|
||
|
||
.%.d: %.cc
|
||
@echo "update $@ ..."; \
|
||
echo -n $< | sed s/\.cc/\.o:/ > $@; \
|
||
$(CXX) $(CFLAGS) $(INCLUDE) -MM $< | sed '1s/.*.://' >> $@;
|
||
|
||
%.o: %.cc
|
||
$(CXX) $(CFLAGS) $(INCLUDE) -o $@ -c $<
|
||
|
||
.%.d: %.cpp
|
||
@echo "update $@ ..."; \
|
||
echo -n $< | sed s/\.cpp/\.o:/ > $@; \
|
||
$(CXX) $(CFLAGS) $(INCLUDE) -MM $< | sed '1s/.*.://' >> $@;
|
||
|
||
%.o: %.cpp
|
||
$(CXX) $(CFLAGS) $(INCLUDE) -o $@ -c $<
|
||
|
||
.%.d: %.c
|
||
@echo "update $@ ..."; \
|
||
echo -n $< | sed s/\.c/\.o:/ > $@; \
|
||
$(CC) $(INCLUDE) -MM $< | sed '1s/.*.://' >> $@;
|
||
|
||
%.o: %.c
|
||
$(CC) $(CFLAGS) $(INCLUDE) -o $@ -c $<
|
||
|
||
#----------------------------------------------------------------------------------
|
||
|