-
Notifications
You must be signed in to change notification settings - Fork 4
Expand file tree
/
Copy pathMakefile
More file actions
89 lines (69 loc) · 2.38 KB
/
Makefile
File metadata and controls
89 lines (69 loc) · 2.38 KB
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
NAME = webserv
CXX = c++
CXXFLAGS = -Wall -Werror -Wextra -std=c++98 -pedantic -g3
RED = \033[31m
GREEN = \033[33m
BLUE = \033[34m
BOLD = \033[1m
FAINT = \033[2m
ITALIC = \033[3m
RESET = \033[0m
################################
## HEADERS ##
################################
INC_DIRS = $(dir $(wildcard ./includes/*/.))
INC = $(addprefix -I, $(INC_DIRS))
# INCS = $(foreach d, $(INC_DIRS), $(wildcard $(d)*.hpp))
################################
## SOURCES ##
################################
SRC_DIRS = $(dir $(wildcard ./sources/*/.)) ./app/
SRCS = $(foreach d, $(SRC_DIRS), $(wildcard $(d)*.cpp))
SRC_NAMES = $(notdir $(SRCS))
################################
## OBJECTS ##
################################
OBJ_DIR = ./objects/
OBJ_NAMES = $(SRC_NAMES:.cpp=.o)
OBJS = $(addprefix $(OBJ_DIR), $(OBJ_NAMES))
vpath %.cpp $(SRC_DIRS)
################################
## PHONIES ##
################################
.PHONY: all clean fclean re info
all : $(NAME)
clean:
@rm -rf $(OBJ_DIR)
@echo "$(RED)$(NAME) : $(OBJ_DIR) deleted$(RESET)"
fclean: clean
@rm -f $(NAME)
@echo "$(RED)$(NAME) : $(NAME) deleted$(RESET)"
re:
@$(MAKE) fclean
@$(MAKE) all
info :
@echo "$(BOLD)$(ITALIC)$(BLUE) Include paths$(RESET)"
@echo "$(FAINT)$(ITALIC)\t$(INC_DIRS)$(RESET)" | sed 's/ /\n\t/g'
@echo "$(BOLD)$(ITALIC)$(BLUE) Source paths paths$(RESET)"
@echo "$(FAINT)$(ITALIC)\t$(SRC_DIRS)$(RESET)" | sed 's/ /\n\t/g'
@echo "$(BOLD)$(ITALIC)$(BLUE) Include files$(RESET)"
@echo "$(FAINT)$(ITALIC)\t$(INCS)$(RESET)" | sed 's/ /\n\t/g'
@echo "$(BOLD)$(ITALIC)$(BLUE) Source files$(RESET)"
@echo "$(FAINT)$(ITALIC)\t$(SRCS)$(RESET)" | sed 's/ /\n\t/g'
@echo "$(BOLD)$(ITALIC)$(BLUE) Source file names$(RESET)"
@echo "$(FAINT)$(ITALIC)\t$(SRC_NAMES)$(RESET)" | sed 's/ /\n\t/g'
@echo "$(BOLD)$(ITALIC)$(BLUE) Object files$(RESET)"
@echo "$(FAINT)$(ITALIC)\t$(OBJS)$(RESET)" | sed 's/ /\n\t/g'
################################
## TARGETS ##
################################
$(NAME) : $(OBJ_DIR) $(OBJS)
@$(CXX) $(CXXFLAGS) $(OBJS) -o $@
@echo "\n$(BLUE)$(NAME) : object files created$(RESET)"
@echo "$(BLUE)$(NAME) : $(NAME) created$(RESET)"
$(OBJ_DIR) :
@mkdir -p $@
@echo "$(BLUE)$(NAME) : $(OBJ_DIR) created$(RESET)"
$(OBJ_DIR)%.o: %.cpp
@$(CXX) $(CXXFLAGS) $(INC) -c $^ -o $@
@echo "$(BLUE).$(RESET)\c"