/
Makefile
107 lines (78 loc) · 2.79 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
NAME = webserv
CXX = c++
CXXFLAGS = -Wall -Wextra -Werror -std=c++98 -D NDEBUG -O2
# CXXFLAGS = -Wall -Wextra -Werror -std=c++98 --pedantic -g3 -fsanitize=address
SRC_DIR = ./src
SRC_MAIN = ./src/main.cpp
OBJ_DIR = ./src_obj
DPS_DIR = ./src_dps
OBJ_DIRS = $(shell find $(SRC_DIR) -type d | xargs -I{} echo $(OBJ_DIR)/{})
DPS_DIRS = $(shell find $(SRC_DIR) -type d | xargs -I{} echo $(DPS_DIR)/{})
SRCS = $(shell find $(SRC_DIR) -type f -name "*.cpp" -not -name "main.cpp")
OBJS = $(addprefix $(OBJ_DIR)/, $(SRCS:.cpp=.o))
DPS = $(addprefix $(DPS_DIR)/, $(SRCS:.cpp=.d))
TESTER = ./unit_tester
TEST_CASE_SRC_DIR = ./test_case
TEST_CASE_OBJ_DIR = ./test_case_obj
TEST_CASE_DPS_DIR = ./test_case_dps
GOOGLE_TEST = ./googletest
GTEST_FLAGS = -isystem ./googletest/include -I./googletest -Wall -Wextra -pthread
GTEST_LIB = ./gtest_main.a
TEST_CASE_OBJ_DIRS = $(shell find $(TEST_CASE_SRC_DIR) -type d | xargs -I{} echo $(TEST_CASE_OBJ_DIR)/{})
TEST_CASE_DPS_DIRS = $(shell find $(TEST_CASE_SRC_DIR) -type d | xargs -I{} echo $(TEST_CASE_DPS_DIR)/{})
TEST_CASE_SRCS = $(shell find $(TEST_CASE_SRC_DIR) -type f -name "*.cpp")
TEST_CASE_OBJS = $(addprefix $(TEST_CASE_OBJ_DIR)/, $(TEST_CASE_SRCS:.cpp=.o))
TEST_CASE_DPS = $(addprefix $(TEST_CASE_DPS_DIR)/, $(TEST_CASE_SRCS:.cpp=.d))
CF = clang-format
.PHONY: all cf
# all: cf $(NAME)
all: $(NAME)
-include $(DPS)
cf:
$(CF) -i src/*.*pp src/*/*.*pp test_case/*.*pp test_case/*/*.*pp
-include $(DPS)
$(NAME): $(OBJ_DIRS) $(DPS_DIRS) $(OBJS) $(SRC_MAIN)
$(CXX) $(CXXFLAGS) -o $@ $(OBJS) $(SRC_MAIN)
$(OBJ_DIR)/%.o: %.cpp
$(CXX) $(CXXFLAGS) -MMD -MP -MF $(DPS_DIR)/$(*).d -c $< -o $@
$(TEST_CASE_OBJ_DIR)/%.o: %.cpp
$(CXX) $(GTEST_FLAGS) -MMD -MP -MF $(TEST_CASE_DPS_DIR)/$(*).d -c $< -o $@
$(OBJ_DIRS):
mkdir -p $@
$(DPS_DIRS):
mkdir -p $@
$(TEST_CASE_OBJ_DIRS):
mkdir -p $@
$(TEST_CASE_DPS_DIRS):
mkdir -p $@
$(GOOGLE_TEST):
git clone -b release-1.7.0 https://github.com/google/googletest.git
$(GTEST_LIB): $(GOOGLE_TEST)
$(CXX) $(GTEST_FLAGS) -c ./googletest/src/gtest-all.cc
$(CXX) $(GTEST_FLAGS) -c ./googletest/src/gtest_main.cc
$(AR) $(ARFLAGS) $@ gtest-all.o gtest_main.o
rm -rf gtest-all.o gtest_main.o
$(TESTER): $(OBJ_DIRS) $(DPS_DIRS) $(OBJS) $(GTEST_LIB) $(TEST_CASE_OBJ_DIRS) $(TEST_CASE_DPS_DIRS) $(TEST_CASE_OBJS)
$(CXX) $(CXXFLAGS) -o $@ $(GTEST_LIB) -lpthread $(OBJS) $(TEST_CASE_OBJS)
.PHONY: unit_test
unit_test:$(TESTER)
$(TESTER)
.PHONY: joint_test
joint_test: $(NAME)
cd ./http_test && bash run.sh
.PHONY: run_test
run_test: unit_test
.PHONY: clean
clean:
rm -rf $(OBJ_DIR) $(DPS_DIR) $(TEST_CASE_OBJ_DIR) $(TEST_CASE_DPS_DIR) $(GTEST_LIB) $(TESTER)
.PHONY: fclean
fclean: clean
rm -f $(NAME)
.PHONY: re
re: fclean all
.PHONY: up
up: down all
./$(NAME) &
.PHONY: down
down:
pkill $(NAME) || :