CC = g++ PROJECT = ld39 OBJDIR = obj SRCDIR = src IDIR = include OPTS = -std=c++14 -g -Wall -I$(IDIR) LIBS = -ltmxlite -lsfml-audio -lsfml-graphics -lsfml-window -lsfml-system SRCS = $(shell find $(SRCDIR) -name '*.cpp') SRCDIRS = $(shell find . -name '*.cpp' | dirname {} | sort | uniq | sed 's/\/$(SRCDIR)//g' ) OBJS = $(patsubst $(SRCDIR)/%.cpp,$(OBJDIR)/%.o,$(SRCS)) .PHONY: default all clean .PRECIOUS: $(TARGET) default: $(PROJECT) all: default $(PROJECT): buildrepo $(OBJS) $(CC) $(OBJS) $(LIBS) -o $@ $(OBJDIR)/%.o: $(SRCDIR)/%.cpp $(CC) $(OPTS) -c $< -o $@ clean: -rm -f obj/*.o -rm -f $(TARGET) run: -./$(PROJECT) buildrepo: @$(call make-repo) define make-repo mkdir -p $(OBJDIR) for dir in $(SRCDIRS); \ do \ mkdir -p $(OBJDIR)/$$dir; \ done endef