-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMakefile
More file actions
69 lines (57 loc) · 1.59 KB
/
Copy pathMakefile
File metadata and controls
69 lines (57 loc) · 1.59 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
CC = clang++
SRC = src/
CPPFLAGS = -Wall -Wextra -Werror -pedantic -std=c++14
DFLAGS = -Wall -Wextra -pedantic -std=c++14 -g
OBJDIR = .obj/
INCLUDES = -I includes/
FILES = main VM Factory Lexer
CPPFILES = $(addsuffix .cpp, $(FILES))
OFILES = $(addprefix $(OBJDIR), $(addsuffix .o, $(FILES)))
NAME = avm
DNAME = d_$(NAME)
CL_CYAN = \033[0;36m
CL_GREEN = \033[0;32m
CL_RED = \033[0;31m
CL_WHITE = \033[0m
.PHONY: all clean fclean re
all: $(NAME)
$(NAME): $(OBJDIR) $(OFILES)
@$(CC) $(CPPFLAGS) $(INCLUDES) $(OFILES) -o $(NAME)
@echo " $(CL_WHITE)+ $(NAME) : Compiled $(CL_GREEN)$@$(CL_WHITE)"
clean:
@echo " $(shell \
if [ -d $(OBJDIR) ]; \
then \
echo " $(CL_WHITE)- $(NAME) : Removing $(CL_RED)$(OBJDIR)$(CL_WHITE) with$(CL_RED)"; \
ls $(OBJDIR) | wc -w | tr -d '[:blank:]'; echo "$(CL_WHITE)object files"; \
rm -Rf $(OBJDIR); \
else \
echo " $(CL_WHITE)# $(NAME) : Nothing to clean"; \
fi) "
fclean: clean
@echo " $(shell \
if [ -f $(NAME) ]; \
then \
echo " $(CL_WHITE)- $(NAME) : Removing $(CL_RED)$(NAME)$(CL_WHITE)"; \
rm -f $(NAME); \
else \
echo " $(CL_WHITE)# $(NAME) : Nothing to fclean"; \
fi) "
re: fclean all
$(addprefix $(OBJDIR), %.o): $(addprefix $(SRC), %.cpp)
@$(CC) $(INCLUDES) $(CPPFLAGS) -o $@ -c $<
$(OBJDIR):
@echo " $(shell \
if [ ! -d $(OBJDIR) ]; \
then \
mkdir $(OBJDIR); \
echo " + $(NAME) : Created $(CL_GREEN)$(OBJDIR)$(CL_WHITE)$(CL_WHITE)"; \
fi) "
tags:
find . -type f -iname "*.[ch]pp" | etags -
j:
$(CC) $(DFLAGS) $(INCLUDES) $(addprefix $(SRC), $(CPPFILES)) -o $(DNAME)
k: fclean
rm -f $(DNAME)
rm -rf *.dSYM
rm -f TAGS