-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathMakefile
executable file
·106 lines (78 loc) · 1.92 KB
/
Makefile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
#source file
SRC = command.cpp net_thread.cpp thread.cpp timer_thread.cpp protocol.cpp http_protocol.cpp handler.cpp tcp_handler.cpp listen_handler.cpp event_thread.cpp common.cpp factory.cpp main_thread.cpp
#Application name
APP = nsqclient
#Application type BIN SO LIB
APP_TYPE = LIB
#Include
INCLUDE = -I./3rd_install/include
#-I/usr/local/include/json
#Link lib
LINK_LIB =
#Install Path
INSTALL_PATH =
#Bin Path
BIN_PATH = bin
#Obj path
OBJ_PATH = obj
#Compiler
CXX = g++
#Options
CFLAGS = -g
#Obj and bin directory Judge
ifeq ($(strip $(BIN_PATH)),)
BIN_PATH = .
endif
ifeq ($(strip $(OBJ_PATH)),)
OBJ_PATH = .
endif
ifeq ($(strip $(INSTALL_PATH)),)
INSTALL_PATH = .
endif
#Dest Splice
ifeq "$(strip $(APP_TYPE))" "SO"
DEST=$(BIN_PATH)/lib$(APP).so
LINKER = $(CXX) -o $(DEST)
CFLAGS+= -fPIC -shared
else
ifeq "$(strip $(APP_TYPE))" "LIB"
DEST = $(BIN_PATH)/lib$(APP).a
LINKER = ar crs $(DEST)
else
ifeq "$(strip $(APP_TYPE))" "BIN"
DEST = $(BIN_PATH)/$(APP)
LINKER = $(CXX) -o $(DEST)
endif
endif
endif
VPATH += $(foreach n,$(SRC),$(dir $(n)):)
VPATH += $(BIN_PATH):$(OBJ_PATH)
#Object file
OBJ = $(addprefix $(OBJ_PATH)/, $(notdir $(SRC:.cpp=.o)))
#Deps file
DEPS = $(addprefix $(OBJ_PATH)/, $(notdir $(SRC:.cpp=.d)))
.PHONY:clean
install_all : all
@if [ -n "${INSTALL_PATH}" ];then \
mkdir -p ${INSTALL_PATH} && \
cp -rf ${DEST} ${INSTALL_PATH}/; \
fi
all:init $(DEPS) $(DEST)
init:
@mkdir -p $(BIN_PATH)
@mkdir -p $(OBJ_PATH)
$(DEST):$(OBJ)
$(LINKER) $^ $(LINK_LIB)
$(OBJ):$(OBJ_PATH)/%.o:%.cpp
$(CXX) $(CFLAGS) $(INCLUDE) $< -c -o $@
$(DEPS):$(OBJ_PATH)/%.d:%.cpp
@mkdir -p $(BIN_PATH);\
mkdir -p $(OBJ_PATH);\
set -e;rm -f $@;\
$(CXX) $(CFLAGS) -MM $(INCLUDE) $< > $@.$$$$;\
sed 's, \($*\)\.o[ :]*,\1.o $@ : , g'< $@.$$$$ > $@;\
rm -f $@.$$$$
include $(DEPS)
clean:
-rm -f $(OBJ_PATH)/*.o $(OBJ_PATH)/*.d $(DEST) \
${INSTALL_PATH}/$(notdir $(DEST))