Makefile 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. override CPPFLAGS += --std=c++1z
  2. override CPPFLAGS += -MMD -MP
  3. override CPPFLAGS += $(shell cat .cxxflags | xargs)
  4. override CPPFLAGS += -I./include -I./source
  5. override LDFLAGS += $(shell cat .ldflags | xargs)
  6. override LDFLAGS += -L./lib
  7. override LDLIBS += $(shell cat .ldlibs | xargs)
  8. override LDLIBS += -lSDL2 -lpthread
  9. PREFIX := $(DESTDIR)/usr/local
  10. BINDIR := $(PREFIX)/bin
  11. NAME := melno
  12. SRCDIR := ./source
  13. TEMPDIR := temp
  14. DISTDIR := out
  15. SOURCES := $(shell find -wholename "$(SRCDIR)/*.cpp")
  16. HEADERS := $(shell find -wholename "$(SRCDIR)/*.hpp" && find -wholename "$(SRCDIR)/*.h")
  17. OUT := $(DISTDIR)/$(NAME)
  18. TARGET := $(OUT:$(DISTDIR)/%=$(BINDIR)/%)
  19. OBJECTS := $(SOURCES:%.cpp=$(TEMPDIR)/%.o)
  20. OBJDIRS := $(shell dirname $(OBJECTS))
  21. LOCALIB := $(wildcard lib/*.a)
  22. DEPENDS := $(OBJECTS:.o=.d)
  23. INSTALL_SRCDIR := $(PREFIX)/source
  24. INSTALL_SOURCES := $(SOURCES:$(SRCDIR)/%=$(INSTALL_SRCDIR)/%) $(HEADERS:$(SRCDIR)/%=$(INSTALL_SRCDIR)/%)
  25. INSTALL_SRCDIRS := $(shell dirname $(INSTALL_SOURCES))
  26. build: $(OUT)
  27. $(OUT): $(OBJECTS) $(LOCALIB) | $(DISTDIR)
  28. $(CXX) $(LDFLAGS) $(OBJECTS) $(LOCALIB) $(LDLIBS) -o $@
  29. $(TEMPDIR)/%.o: %.cpp | $(TEMPDIR)
  30. @mkdir -p $(@D)
  31. $(CXX) $(CPPFLAGS) $(CXXFLAGS) -o $@ -c $<
  32. $(TEMPDIR):
  33. @mkdir -p $@
  34. $(DISTDIR):
  35. @mkdir -p $@
  36. clean:
  37. @rm $(DEPENDS) 2> /dev/null || true
  38. @rm $(OBJECTS) 2> /dev/null || true
  39. @rmdir -p $(OBJDIRS) 2> /dev/null || true
  40. @rmdir -p $(TEMPDIR) 2> /dev/null || true
  41. @echo Temporaries cleaned!
  42. distclean: clean
  43. @rm $(OUT) 2> /dev/null || true
  44. @rmdir -p $(DISTDIR) 2> /dev/null || true
  45. @echo All clean!
  46. install: $(TARGET)
  47. $(BINDIR)/%: $(DISTDIR)/% | $(BINDIR)
  48. install --strip $< $@
  49. $(BINDIR):
  50. @mkdir $@
  51. uninstall:
  52. -rm $(TARGET)
  53. @rmdir -p $(BINDIR) 2> /dev/null || true
  54. @echo Uninstall complete!
  55. install_source: $(INSTALL_SOURCES)
  56. $(INSTALL_SRCDIR)/%: $(SRCDIR)/% ./COPYRIGHT
  57. @mkdir -p $(@D)
  58. cat ./COPYRIGHT > $@
  59. cat $< >> $@
  60. uninstall_source:
  61. -rm $(INSTALL_SOURCES)
  62. @rmdir -p $(INSTALL_SRCDIRS) 2> /dev/null || true
  63. @echo Source code uninstalled!
  64. -include $(DEPENDS)
  65. .PRECIOUS : $(OBJECTS)
  66. .PHONY : build clean distclean uninstall uninstall_source