-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMakefile
More file actions
123 lines (96 loc) · 2.98 KB
/
Makefile
File metadata and controls
123 lines (96 loc) · 2.98 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
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
##########################
# Check CMD #
##########################
ifeq ($(VERBOSE), 1)
V=
else
V=@
endif
DEBUG:=1
ifeq ($(DEBUG), 1)
GFLAG = -ggdb -DTD_DEBUG
else
GFLAG = -O3
endif
###########################
# Settings #
###########################
TARGET:=td
BUILDDIR :=build
INCDIR :=inc
SRCDIR :=src
TESTSDIR :=tests
DEFINES :=
INCLUDE := -I $(INCDIR)
LIBS :=-lncurses
WARNING :=-Wall -Wextra -Wformat=0
CPP:=g++
CC :=gcc
CPP_EXT:=cpp
C_EXT :=c
###########################
# Init #
###########################
CPP_FLAGS:=-std=c++14 $(GFLAG) $(WARNING)
C_FLAGS :=$(GFLAG) $(WARNING)
#TESTS_SRC:=$(wildcard $(TESTSDIR)/*.$(CPP_EXT))
#TESTS :=$(patsubst %.$(CPP_EXT),%,$(TESTS_SRC))
CPP_SRC :=$(wildcard $(SRCDIR)/*.$(CPP_EXT))
C_SRC :=$(wildcard $(SRCDIR)/*.$(C_EXT))
SRC :=$(CPP_SRC) $(C_SRC)
CPP_OBJS :=$(patsubst %.$(CPP_EXT),$(BUILDDIR)/%.o,$(CPP_SRC))
C_OBJS :=$(patsubst %.$(C_EXT),$(BUILDDIR)/%.o,$(C_SRC))
OBJS :=$(CPP_OBJS) $(C_OBJS)
CPP_DEPS :=$(patsubst %.$(CPP_EXT),$(BUILDDIR)/%.d,$(CPP_SRC))
C_DEPS :=$(patsubst %.$(C_EXT),$(BUILDDIR)/%.d,$(C_SRC))
DEPS :=$(TEST_DEPS) $(CPP_DEPS) $(C_DEPS)
TESTS_ :=$(patsubst %.$(CPP_EXT),$(BUILDDIR)/%.o,$(TESTS_SRC))
TESTS_OBJS :=$(filter-out $(BUILDDIR)/$(SRCDIR)/main.o, $(OBJS))
#####################
# Compile #
#####################
.PHONY: all clean run test
.SUFFIXES:
.SECONDARY:
all: debug $(TESTS) $(TARGET)
test: debug $(TESTS)
debug:
# @echo DEBUG ON!
# @echo "TARGET(s): "$(TARGET) $(TESTS)
# @echo "SRC: "$(SRC)
# @echo "OBJS: "$(OBJS)
# @echo "DEPS: "$(DEPS)
# @echo "TESTS_OBJS: "$(TESTS_OBJS)
# @echo "------------- END OF DEBUG -----------"
ifneq ($(MAKECMDGOALS), clean)
-include $(DEPS)
endif
$(BUILDDIR):
@echo "# Creating build-directory ( "$(BUILDDIR)")"
$(V) mkdir -p $(BUILDDIR)/$(SRCDIR)
$(V) mkdir -p $(BUILDDIR)/$(TESTSDIR)
$(TESTS): $(TESTS_) $(TESTS_OBJS) Makefile | $(BUILDDIR)
@echo "# Linking Test ( "$(TESTS)" )"
$(V) $(CPP) $(CPP_FLAGS) $(TESTS_FLAGS) $(INCLUDE) $(DEFINES) -o \
$(patsubst $(BUILDDIR)/%.o,%,$<) $< $(TESTS_OBJS) $(LIBS)
$(TARGET): $(OBJS) $(DEPS) Makefile | $(BUILDDIR)
@echo "# Linking ( "$(TARGET)" )"
$(V) $(CPP) $(CPP_FLAGS) $(INCLUDE) $(DEFINES) -o $(TARGET) $(OBJS) $(LIBS)
$(BUILDDIR)/%.d: %.$(C_EXT) Makefile | $(BUILDDIR)
@echo "# Creating dependencies for ( "$<" )"
$(V) $(CC) $(DEFINES) $(INCLUDE) $(C_FLAGS) -M -MT $(@:.d=.o) -o $@ $<
$(BUILDDIR)/%.d: %.$(CPP_EXT) Makefile | $(BUILDDIR)
@echo "# Creating dependencies for ( "$<" )"
$(V) $(CPP) $(DEFINES) $(INCLUDE) $(CPP_FLAGS) -M -MT $(@:.d=.o) -o $@ $<
$(BUILDDIR)/%.o: %.$(C_EXT) Makefile | $(BUILDDIR)
@echo "# Compiling ( "$<" )"
$(V) $(CC) $(DEFINES) $(INCLUDE) $(C_FLAGS) -c $< -o $@
$(BUILDDIR)/%.o: %.$(CPP_EXT) Makefile | $(BUILDDIR)
@echo "# Compiling ("$<" )"
$(V) $(CPP) $(DEFINES) $(INCLUDE) $(CPP_FLAGS) -c $< -o $@
clean:
@echo "# Cleaning up..."
$(V) $(RM) -r $(BUILDDIR)
$(V) $(RM) $(TARGET)
run:
./$(TARGET)