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