-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathMakefile
80 lines (59 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
CC := g++
LD := g++
AR := ar
CC_FLAGS := -Wall -Wextra -Wpedantic -std=c++17 -fno-rtti -fno-exceptions -MMD -MP -g
CC_INCLUDES := \
-I./include \
-I./third-party/imgui \
-I./third-party/imgui/examples
CC_DEFINES :=
AR_FLAGS := rsc
BIN_DIR := bin
# imgroot
IMGROOT_LIB_DIR := $(BIN_DIR)
IMGROOT_LIB_NAME := imgroot
IMGROOT_LIB := $(IMGROOT_LIB_DIR)/lib$(IMGROOT_LIB_NAME).a
# example
EXAMPLE_DIR := $(BIN_DIR)
EXAMPLE_NAME := example
EXAMPLE := $(EXAMPLE_DIR)/$(EXAMPLE_NAME)
all:
@$(MAKE) --no-print-directory --jobs 8 $(IMGROOT_LIB) $(EXAMPLE)
###########
# ImGroot #
###########
IMGROOT_LIB_SRC_DIR := src
IMGROOT_LIB_OBJ_DIR := $(IMGROOT_LIB_DIR)/obj/imgroot
IMGROOT_LIB_SRC := $(wildcard $(addsuffix /*.cpp, $(IMGROOT_LIB_SRC_DIR)))
IMGROOT_LIB_OBJ := $(addprefix $(IMGROOT_LIB_OBJ_DIR)/, $(addsuffix .o, $(IMGROOT_LIB_SRC)))
$(IMGROOT_LIB): $(IMGROOT_LIB_OBJ)
@echo [ LD ] $@
@mkdir --parent $(@D)
@$(AR) $(AR_FLAGS) $@ $^
$(IMGROOT_LIB_OBJ_DIR)/%.o: %
@echo [ CC ] $<
@mkdir --parent $(@D)
@$(CC) $(CC_FLAGS) $(CC_INCLUDES) $(CC_DEFINES) -c $< -o $@
###########
# Example #
###########
EXAMPLE_SRC_DIR := example third-party/imgui
EXAMPLE_OBJ_DIR := $(EXAMPLE_DIR)/obj/imgroot
EXAMPLE_SRC := $(wildcard $(addsuffix /*.cpp, $(EXAMPLE_SRC_DIR))) \
third-party/imgui/examples/imgui_impl_glfw.cpp \
third-party/imgui/examples/imgui_impl_opengl3.cpp
EXAMPLE_OBJ := $(addprefix $(EXAMPLE_OBJ_DIR)/, $(addsuffix .o, $(EXAMPLE_SRC)))
$(EXAMPLE): $(IMGROOT_LIB) $(EXAMPLE_OBJ)
@echo [ LD ] $@
@mkdir --parent $(@D)
@$(LD) $(EXAMPLE_OBJ) -L$(IMGROOT_LIB_DIR) -l$(IMGROOT_LIB_NAME) -lGLEW -lGL -lglfw -lstdc++fs -o $@
$(EXAMPLE_OBJ_DIR)/%.o: %
@echo [ CC ] $<
@mkdir --parent $(@D)
@$(CC) $(CC_FLAGS) $(CC_INCLUDES) $(CC_DEFINES) -c $< -o $@
run: $(EXAMPLE)
@./$(EXAMPLE)
clean:
rm -rf $(BIN_DIR)
-include $(IMGROOT_LIB_OBJ:.o=.d)
-include $(EXAMPLE_OBJ:.o=.d)