-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathMakefile
82 lines (65 loc) · 1.85 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
CXX = g++
SRC_DIR = src
INCLUDES = $(shell pkg-config --cflags sdl2) -I $(SRC_DIR)
CXXFLAGS = -w $(INCLUDES) -g -Wall -Wextra -Werror -DDEBUG -std=c++17
LFLAGS = -lSDL2 -lm -lSDL2_gfx
MAIN = $(SRC_DIR)/main.cpp
SRCS = $(shell find $(SRC_DIR) -name "*.cpp" -type f)
HEADERS = $(shell find $(SRC_DIR) -name "*.hpp" -type f)
LIB_SRCS = $(filter-out $(MAIN), $(SRCS))
TESTS = $(wildcard tests/*.cpp)
EXAMPLES = $(shell find examples -name "*.cpp" -type f)
RUN_EXAMPLE = 1
LIB_OBJS = $(LIB_SRCS:%.cpp=%.o)
TESTS_OBJS = $(TESTS:%.cpp=%.bin)
OBJS = $(SRCS:%.cpp=%.o)
BIN_NAME = hazard-memory.bin
all: $(OBJS)
$(CXX) $(OBJS) $(CXXFLAGS) $(LFLAGS) -o $(BIN_NAME)
%.o: %.cpp
$(CXX) -c $(CXXFLAGS) $< -o $@
# running examples easily
FORCE:
examples/%.cpp: $(LIB_OBJS) FORCE
$(CXX) $(LIB_OBJS) $@ $(CXXFLAGS) $(LFLAGS) -o $(@:%.cpp=%.bin)
$(if $(RUN_EXAMPLE), ./$(@:%.cpp=%.bin))
%.bin: FORCE
./$@
format/%:
clang-format -i $*
format: $(SRCS)
clang-format -i $(SRCS) $(HEADERS) $(EXAMPLES)
examples: $(EXAMPLES)
tests: $(TESTS_OBJS)
check:
@echo "-- Test everything"
@echo "-- Unit Testing"
@make tests
@echo "-- Compile examples"
@make examples RUN_EXAMPLE=
@echo "-- Compile main project"
@make
tests/%.bin: tests/%.cpp $(LIB_OBJS)
$(CXX) $(LFLAGS) $(CXXFLAGS) $(LIB_OBJS) $< -o $@
@./$@
@echo -- $< [ok]
run: all
./$(BIN_NAME)
clean:
find . -iname '*.o' -or -iname '*.bin' | xargs rm -fv
tags:
find . -type f -name "*.*pp" | xargs etags -a
# for debug purposes
vars:
@echo CXX = $(CXX)
@echo CXXFLAGS = $(CXXFLAGS)
@echo LFLAGS = $(LFLAGS)
@echo INCLUDES = $(INCLUDES)
@echo SRC_DIR = $(SRC_DIR)
@echo SRCS = $(SRCS)
@echo EXAMPLES = $(EXAMPLES)
@echo LIB_SRCS = $(LIB_SRCS)
@echo LIB_OBJS = $(LIB_OBJS)
@echo OBJS = $(OBJS)
@echo BIN_NAME = $(BIN_NAME)
.PHONY: vars tags