forked from eclipse-paho/paho.mqtt.cpp
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathMakefile
137 lines (98 loc) · 2.88 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
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
# Make include file for the mqttpp library
#
# This will compile all the .cpp files in the directory into the library.
# Any files to be excluded should be placed in the variable SRC_IGNORE, like:
# SRC_IGNORE = this.c that.cpp
#
MODULE = mqttpp
# ----- Tools -----
ifndef VERBOSE
QUIET := @
endif
# ----- Directories -----
LIB_DIR ?= lib
OBJ_DIR ?= obj
SRC_DIR ?= src
INC_DIR ?= $(SRC_DIR)
PAHO_C_HEADERS ?= /usr/local/include
INC_DIRS += $(INC_DIR) $(PAHO_C_HEADERS)
_MK_OBJ_DIR := $(shell mkdir -p $(OBJ_DIR))
_MK_LIB_DIR := $(shell mkdir -p $(LIB_DIR))
# ----- Definitions for the shared library -----
LIB_BASE ?= $(MODULE)
LIB_MAJOR ?= 0
LIB_MINOR ?= 1
LIB_LINK = lib$(LIB_BASE).so
LIB_MAJOR_LINK = $(LIB_LINK).$(LIB_MAJOR)
LIB = $(LIB_MAJOR_LINK).$(LIB_MINOR)
TGT = $(LIB_DIR)/$(LIB)
# ----- Sources -----
SRCS += $(wildcard $(SRC_DIR)/*.cpp)
ifdef SRC_IGNORE
SRCS := $(filter-out $(SRC_IGNORE),$(SRCS))
endif
OBJS := $(subst $(SRC_DIR),$(OBJ_DIR),$(SRCS:.cpp=.o))
DEPS := $(OBJS:.o=.dep)
# ----- Compiler flags, etc -----
CXXFLAGS += -std=c++0x
CPPFLAGS += -Wall -fPIC
ifdef DEBUG
DEFS += DEBUG
CPPFLAGS += -g -O0
else
DEFS += _NDEBUG
CPPFLAGS += -O2 -Wno-unused-result -Werror
endif
CPPFLAGS += $(addprefix -D,$(DEFS)) $(addprefix -I,$(INC_DIRS))
LIB_DEPS += c stdc++ pthread
LIB_DEP_FLAGS += $(addprefix -l,$(LIB_DEPS))
LDFLAGS := -g -shared -Wl,-soname,$(LIB_MAJOR_LINK) -L$(LIB_DIR)
# ----- Compiler directives -----
$(OBJ_DIR)/%.o: $(SRC_DIR)/%.cpp
@echo $(CXX) $<
$(QUIET) $(COMPILE.cpp) $(OUTPUT_OPTION) $<
# ----- Build targets -----
.PHONY: all
all: $(TGT) $(LIB_DIR)/$(LIB_LINK) $(LIB_DIR)/$(LIB_MAJOR_LINK)
# This might work for a static library
#$(TGT): $(OBJS)
# @echo Creating library: $@
# $(QUIET) $(AR) $(ARFLAGS) $@ $^
$(TGT): $(OBJS)
@echo Creating library: $@
$(QUIET) $(CC) $(LDFLAGS) -o $@ $^ $(LIB_DEP_FLAGS)
$(LIB_DIR)/$(LIB_LINK): $(LIB_DIR)/$(LIB_MAJOR_LINK)
$(QUIET) cd $(LIB_DIR) ; $(RM) $(LIB_LINK) ; ln -s $(LIB_MAJOR_LINK) $(LIB_LINK)
$(LIB_DIR)/$(LIB_MAJOR_LINK): $(TGT)
$(QUIET) cd $(LIB_DIR) ; $(RM) $(LIB_MAJOR_LINK) ; ln -s $(LIB) $(LIB_MAJOR_LINK)
.PHONY: dump
dump:
@echo LIB=$(LIB)
@echo TGT=$(TGT)
@echo LIB_DIR=$(LIB_DIR)
@echo OBJ_DIR=$(OBJ_DIR)
@echo CFLAGS=$(CFLAGS)
@echo CPPFLAGS=$(CPPFLAGS)
@echo CXX=$(CXX)
@echo COMPILE.cpp=$(COMPILE.cpp)
@echo SRCS=$(SRCS)
@echo OBJS=$(OBJS)
@echo DEPS:$(DEPS)
@echo LIB_DEPS=$(LIB_DEPS)
.PHONY: clean
clean:
$(QUIET) $(RM) $(TGT) $(LIB_DIR)/$(LIB_LINK) $(LIB_DIR)/$(LIB_MAJOR_LINK) \
$(OBJS)
.PHONY: distclean
distclean: clean
$(QUIET) rm -rf $(OBJ_DIR) $(LIB_DIR)
# ----- Header dependencies -----
MKG := $(findstring $(MAKECMDGOALS),"clean distclean dump")
ifeq "$(MKG)" ""
-include $(DEPS)
endif
$(OBJ_DIR)/%.dep: %.cpp
@echo DEP $<
$(QUIET) $(CXX) -M $(CPPFLAGS) $(CXXFLAGS) $< > $@.$$$$; \
sed 's,\($*\)\.o[ :]*,$$(OBJ_DIR)/\1.o $@ : ,g' < $@.$$$$ > $@; \
$(RM) $@.$$$$