-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathMakefile
70 lines (52 loc) · 1.83 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
CC = gcc
CXXVER = -std=c++17
CXXDEBUG = -ggdb3
CXXLDFLAGS = -lstdc++
CXXINCLUDE = -I.
CXXWARNING = -Wall
# Get value of "BUILD_TYPE" from environment
BUILD_TYPE_VALUE := $(shell echo $$BUILD_TYPE)
ifeq ($(BUILD_TYPE_VALUE), Debug)
CXXOPTIMIZE := -O0
CXXFLAGS := $(CXXVER) $(CXXINCLUDE) $(CXXOPTIMIZE) $(CXXWARNING) $(CXXDEBUG)
else
CXXOPTIMIZE := -O3
CXXFLAGS := $(CXXVER) $(CXXINCLUDE) $(CXXOPTIMIZE) $(CXXWARNING)
endif
BUILD_DIR = build
SRC_DIR = src
INC_DIR = include
RES_DIR = res
RAW_NAME = subwaysp
BINARY_EXTENSION =
PROGRAM_NAME = $(RAW_NAME)$(BINARY_EXTENSION)
# Installation related variables and target
INSTALL = cp -pPR
INSTALL_DIR := /usr/local/bin
OBJS = $(BUILD_DIR)/main.o \
$(BUILD_DIR)/jsonparser.o \
$(BUILD_DIR)/graph.o \
$(BUILD_DIR)/stations.o
all: prepare build $(BUILD_DIR)/$(PROGRAM_NAME)
# preparing prerequisites before building project
prepare:
@[ ! -d "$(BUILD_DIR)" ] && mkdir "$(BUILD_DIR)" || true
build: $(OBJS)
$(BUILD_DIR)/$(PROGRAM_NAME): build
$(CC) $(OBJS) $(CXXLDFLAGS) -o $(BUILD_DIR)/$(PROGRAM_NAME)
$(BUILD_DIR)/main.o: $(SRC_DIR)/main.cpp
$(CC) $(SRC_DIR)/main.cpp -c $(CXXFLAGS) -o $(BUILD_DIR)/main.o
$(BUILD_DIR)/jsonparser.o: $(SRC_DIR)/jsonparser.cpp $(INC_DIR)/jsonparser.h
$(CC) $(SRC_DIR)/jsonparser.cpp -c $(CXXFLAGS) -o $(BUILD_DIR)/jsonparser.o
$(BUILD_DIR)/graph.o: $(SRC_DIR)/graph.cpp $(INC_DIR)/graph.h
$(CC) $(SRC_DIR)/graph.cpp -c $(CXXFLAGS) -o $(BUILD_DIR)/graph.o
$(BUILD_DIR)/stations.o: $(SRC_DIR)/stations.cpp
$(CC) $(SRC_DIR)/stations.cpp -c $(CXXFLAGS) -o $(BUILD_DIR)/stations.o
install: all
mkdir -vp $(INSTALL_DIR)
$(INSTALL) $(BUILD_DIR)/$(PROGRAM_NAME) $(INSTALL_DIR)
uninstall:
@/bin/rm -rfv "$(INSTALL_DIR)/$(PROGRAM_NAME)"
clean:
@/bin/rm -rfv $(BUILD_DIR)/*
.PHONY: all prepare build $(BUILD_DIR)/$(PROGRAM_NAME) clean install uninstall