60 lines
1.3 KiB
Makefile
60 lines
1.3 KiB
Makefile
# compiler stuff
|
|
CXX := c++
|
|
CXXFLAGS := -I include -std=c++11 -Wall -Wextra
|
|
DBG_CXXFLAGS := $(CXXFLAGS) -g
|
|
RLS_CXXFLAGS := $(CXXFLAGS) -O2
|
|
|
|
# linker stuff
|
|
LDFLAGS := -lncursesw
|
|
DBG_LDFLAGS := $(LDFLAGS)
|
|
RLS_LDFLAGS := $(LDFLAGS) -s
|
|
|
|
# directories
|
|
BUILD_DIR := build
|
|
SRC_DIR := src
|
|
BIN_DIR := bin
|
|
DBG_DIR := $(BIN_DIR)/debug
|
|
RLS_DIR := $(BIN_DIR)/release
|
|
DBG_EXEC := $(BIN_DIR)/debug/debug
|
|
RLS_EXEC := $(BIN_DIR)/release/release
|
|
RLS_STRIPPED_EXEC := $(BIN_DIR)/release_stripped
|
|
|
|
# sources and objects
|
|
SRCS := $(wildcard $(SRC_DIR)/*.cpp)
|
|
DBG_OBJS := $(patsubst $(SRC_DIR)/%.cpp,$(BUILD_DIR)/debug_%.o,$(SRCS))
|
|
RLS_OBJS := $(patsubst $(SRC_DIR)/%.cpp,$(BUILD_DIR)/release_%.o,$(SRCS))
|
|
|
|
$(shell mkdir -p $(BIN_DIR))
|
|
$(shell mkdir -p $(DBG_DIR))
|
|
$(shell mkdir -p $(RLS_DIR))
|
|
$(shell mkdir -p $(BUILD_DIR))
|
|
|
|
# phony rules
|
|
.PHONY := all debug release clean
|
|
|
|
all: debug
|
|
|
|
debug: $(DBG_EXEC)
|
|
release: $(RLS_EXEC) $(RLS_STRIPPED_EXEC)
|
|
both: debug release
|
|
|
|
# linking
|
|
$(DBG_EXEC): $(DBG_OBJS)
|
|
$(CXX) -o $@ $^ $(DBG_LDFLAGS)
|
|
|
|
$(RLS_STRIPPED_EXEC): $(RLS_OBJS)
|
|
$(CXX) -o $@ $^ $(RLS_LDFLAGS)
|
|
|
|
$(RLS_EXEC): $(RLS_OBJS)
|
|
$(CXX) -o $@ $^ $(LDFLAGS)
|
|
|
|
# compiling
|
|
$(BUILD_DIR)/debug_%.o: $(SRC_DIR)/%.cpp
|
|
$(CXX) -c -o $@ $< $(DBG_CXXFLAGS)
|
|
|
|
$(BUILD_DIR)/release_%.o: $(SRC_DIR)/%.cpp
|
|
$(CXX) -c -o $@ $< $(RLS_CXXFLAGS)
|
|
|
|
clean:
|
|
rm -rf $(BUILD_DIR) $(DBG_DIR) $(RLS_DIR)
|