forked from renatocf/rugby-game
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathMakefile
126 lines (98 loc) · 3.44 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
################################################################################
## FLAGS ##
################################################################################
CFLAGS := -Wall -Wextra -Werror -pedantic -O2
LDFLAGS :=
################################################################################
## COMMANDS ##
################################################################################
CC := gcc
MKDIR := mkdir -p
RM := rm -f
RMDIR := rm -rf
################################################################################
## DIRECTORIES ##
################################################################################
SRCDIR := src
INCDIR := include
OBJDIR := obj
BINDIR := bin
DEPDIR := dep
BIN := $(BINDIR)/main
SRC := $(wildcard $(SRCDIR)/*.c)
OBJ := $(patsubst $(SRCDIR)/%.c,$(OBJDIR)/%.o,$(SRC))
INC := $(wildcard $(INCDIR)/*.h)
DEP := $(wildcard $(DEPDIR)/*.d)
CLIBS := $(patsubst %,-I %,$(INCDIR))
################################################################################
## COLORS ##
################################################################################
ifndef NO_COLORS
DEF := \033[0;38m
RED := \033[1;31m
GREEN := \033[1;32m
YELLOW := \033[1;33m
BLUE := \033[1;34m
PURPLE := \033[1;35m
CYAN := \033[1;36m
WHITE := \033[1;37m
RES := \033[0m
endif
define msg-red
printf "${RED}%b${RES}\n" $1
endef
define msg-green
printf "${GREEN}%b${RES}\n" $1
endef
define msg-yellow
printf "${YELLOW}%b${RES}\n" $1
endef
define msg-blue
printf "${BLUE}%b${RES}\n" $1
endef
define msg-purple
printf "${PURPLE}%b${RES}\n" $1
endef
define msg-cyan
printf "${CYAN}%b${RES}\n" $1
endef
################################################################################
## COMPILATION ##
################################################################################
.PHONY:
all: $(BIN)
$(BIN): $(OBJ) | $(BINDIR)
@$(call msg-green,"Gerando executável $@")
@$(CC) ${LDFLAGS} $^ -o $@
# Imports auto-generated dependencies
-include $(DEP)
$(OBJDIR)/%.o: $(SRCDIR)/%.c | $(OBJDIR) $(DEPDIR)
@$(call msg-cyan,"Compilando artefato $@")
@$(CC) -c ${CFLAGS} ${CLIBS} -MP -MMD -MF $(DEPDIR)/$*.d $< -o $@
.PHONY:
compiledb:
@$(call msg-blue,"Gerando base de compilação")
@compiledb -n make
################################################################################
## DIRECTORIES ##
################################################################################
$(BINDIR) $(OBJDIR) $(DEPDIR):
@$(call msg-blue,"Criando diretório $@")
@$(MKDIR) $@
################################################################################
## CLEANING ##
################################################################################
define rmdir
$(call msg-purple,"Removendo diretório $(strip $1)") && $(RMDIR) $(strip $1)
endef
define rm
$(call msg-purple,"Removendo arquivo $(strip $1)") && $(RM) $(strip $1)
endef
.PHONY:
clean:
@$(call rmdir,$(OBJDIR))
@$(call rmdir,$(BINDIR))
.PHONY:
distclean: clean
@$(call rmdir,$(DEPDIR))
@$(call rm,compile_commands.json)