# 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)