]> git.localhorst.tv Git - blank.git/blob - Makefile
build both release and debug at the same time
[blank.git] / Makefile
1 CXX = g++ --std=c++11
2 LDXX = g++
3
4 LIBS = sdl2 SDL2_image glew
5
6 PKGFLAGS := $(shell pkg-config --cflags $(LIBS))
7 PKGLIBS := $(shell pkg-config --libs $(LIBS))
8
9 CPPFLAGS ?=
10 CPPFLAGS += $(PKGFLAGS)
11 CXXFLAGS ?=
12 CXXFLAGS += -Wall
13 LDXXFLAGS ?=
14 LDXXFLAGS += $(PKGLIBS)
15
16 DEBUG_FLAGS = -g3 -O0
17 RELEASE_FLAGS = -DNDEBUG -O2
18
19 SOURCE_DIR := src
20 DEBUG_DIR := build/debug
21 RELEASE_DIR := build/release
22 DIR := $(RELEASE_DIR) $(DEBUG_DIR) build
23
24 SRC := $(wildcard $(SOURCE_DIR)/*.cpp)
25 RELEASE_OBJ := $(patsubst $(SOURCE_DIR)/%.cpp, $(RELEASE_DIR)/%.o, $(SRC))
26 DEBUG_OBJ := $(patsubst $(SOURCE_DIR)/%.cpp, $(DEBUG_DIR)/%.o, $(SRC))
27 RELEASE_DEP := $(RELEASE_OBJ:.o=.d)
28 DEBUG_DEP := $(DEBUG_OBJ:.o=.d)
29 RELEASE_BIN := blank
30 DEBUG_BIN := blank.debug
31 OBJ := $(RELEASE_OBJ) $(DEBUG_OBJ)
32 DEP := $(RELEASE_DEP) $(DEBUG_DEP)
33 BIN := $(RELEASE_BIN) $(DEBUG_BIN)
34
35 all: $(BIN)
36
37 release: $(RELEASE_BIN)
38
39 debug: $(DEBUG_BIN)
40
41 run: blank
42         ./blank
43
44 gdb: blank.debug
45         gdb ./blank.debug
46
47 clean:
48         rm -df $(OBJ) $(DEP) $(DIR)
49
50 distclean: clean
51         rm -f $(BIN)
52
53 .PHONY: all release debug run gdb clean distclean
54
55 -include $(DEP)
56
57 $(RELEASE_BIN): $(RELEASE_OBJ)
58         @echo link: $@
59         @$(LDXX) -o $@ $(CXXFLAGS) $(LDXXFLAGS) $(RELEASE_FLAGS) $^
60
61 $(DEBUG_BIN): $(DEBUG_OBJ)
62         @echo link: $@
63         @$(LDXX) -o $@ $(CXXFLAGS) $(LDXXFLAGS) $(DEBUG_FLAGS) $^
64
65 $(RELEASE_DIR)/%.o: $(SOURCE_DIR)/%.cpp | $(RELEASE_DIR)
66         @echo compile: $@
67         @$(CXX) -c $(CPPFLAGS) $(CXXFLAGS) $(RELEASE_FLAGS) -o $@ -MMD -MP -MF"$(@:.o=.d)" -MT"$@" $<
68
69 $(DEBUG_DIR)/%.o: $(SOURCE_DIR)/%.cpp | $(DEBUG_DIR)
70         @echo compile: $@
71         @$(CXX) -c $(CPPFLAGS) $(CXXFLAGS) $(DEBUG_FLAGS) -o $@ -MMD -MP -MF"$(@:.o=.d)" -MT"$@" $<
72
73 $(DIR):
74         @mkdir -p "$@"