123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245 |
- # -------------------------------------------------------------------------------
- TARS_PATH :=/usr/local/tars/cpp
- #-------------------------------------------------------------------------------
- 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 *.cc *.c) $(PB_CPP))
- LOCAL_OBJ += $(patsubst %.c,%.o, $(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 ($(TARS_OPENTRACKING), 0)
- #ifneq ($(TARS_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_static
- endif
- endif
- #ifneq ($(TARS_OPENTRACKING), 0)
- #ifneq ($(TARS_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 $<
- #----------------------------------------------------------------------------------
|