CXX := g++ CXXFLAGS := -Wall -Wextra -std=c++11 -g -O2 LDFLAGS := OBJDIR := .objs ifneq ($(value AI),) AI_UPPER := $(shell echo '$(value AI)' | tr a-z A-Z) AI_LOWER := $(shell echo '$(value AI)' | tr A-Z a-z) else AI_UPPER := MC AI_LOWER := mc endif CXXFLAGS += -DAI=$(AI_UPPER) MAIN_OBJ := $(OBJDIR)/main_$(AI_LOWER).o CXX_SOURCES := $(filter-out main.cpp ai_%.cpp,$(wildcard *.cpp)) ai_$(AI_LOWER).cpp OBJ_FILES := $(patsubst %.cpp,$(OBJDIR)/%.o,$(CXX_SOURCES)) $(MAIN_OBJ) DEP_FILES := $(patsubst %.cpp,$(OBJDIR)/%.d,$(CXX_SOURCES)) $(MAIN_OBJ:.o=.d) TARGET := ai$(AI_LOWER) AI_ALL_LOWER := $(patsubst ai_%.cpp,%,$(wildcard ai_*.cpp)) TARGET_ALL := $(patsubst %,ai%,$(AI_ALL_LOWER)) .PHONY: all clean all: $(TARGET) clean: rm -f $(TARGET_ALL) rm -rf $(OBJDIR) $(TARGET): $(OBJ_FILES) termio/libtermio.a @echo LD $@ @$(CXX) $(CXXFLAGS) -o $@ $^ termio/libtermio.a $(LDFLAGS) $(OBJDIR)/%.o: %.cpp termio/libtermio.a @mkdir -p $(dir $@) @echo CXX $< @$(CXX) $(CXXFLAGS) -c -o $@ $< $(OBJDIR)/%.d: %.cpp termio/libtermio.a @mkdir -p $(dir $@) @echo DEP $< @$(CXX) -MT $(OBJDIR)/$*.o -MM $(CXXFLAGS) $< >$@ $(OBJDIR)/main_$(AI_LOWER).o: main.cpp termio/libtermio.a @mkdir -p $(dir $@) @echo CXX "$< -o $(notdir $@)" @$(CXX) $(CXXFLAGS) -c -o $@ $< $(OBJDIR)/main_$(AI_LOWER).d: main.cpp termio/libtermio.a @mkdir -p $(dir $@) @echo DEP "$< -o $(notdir $@)" @$(CXX) -MT $(OBJDIR)/$*.o -MM $(CXXFLAGS) $< >$@ termio/.git: git submodule update --init termio/libtermio.a: termio/.git $(wildcard termio/*.c termio/*.h) make -C termio -include $(DEP_FILES)