Makefile 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. #
  2. # Makefile
  3. #
  4. include Makefile.conf
  5. ARNAME = $(notdir $(CURDIR)).a
  6. SUBDIRS := $(wildcard */.)
  7. SUBDIRS := $(foreach dir,$(SUBDIRS),$(subst /.,,$(dir)))
  8. FILTER = doc%
  9. SUBDIRS := $(filter-out $(FILTER),$(SUBDIRS))
  10. SUBDIRARS = $(foreach dir,$(SUBDIRS),$(dir)/$(dir).a)
  11. LOCALSOURCES = $(wildcard *.cpp *.cc)
  12. LOCALOBJECTS := $(LOCALSOURCES:.cpp=.o)
  13. LOCALOBJECTS := $(LOCALOBJECTS:.cc=.o)
  14. LOCALDEPENDS = $(LOCALOBJECTS:.o=.d)
  15. SOURCES = $(wildcard *.cpp */*.cpp */*/*.cpp */*/*/*.cpp)
  16. OBJECTS = $(SOURCES:.cpp=.o)
  17. DEPENDS = $(OBJECTS:.o=.d)
  18. TARGETS =
  19. $(LOCALOBJECTS): | $(SUBDIRS)
  20. $(OBJECTS): | $(SUBDIRS)
  21. artifacts: $(LOCALOBJECTS)
  22. .DEFAULT_GOAL := artifacts
  23. -include Makefile.target
  24. ifneq ($(MAKECMDGOALS),clean)
  25. -include $(LOCALDEPENDS)
  26. endif
  27. %.d: %.cpp
  28. $(info [MM] $@)
  29. @$(CC) $(CFLAGS) $< -MM -MT $(@:.d=.o) >$@
  30. %.o: %.cpp
  31. $(info [CC] $@)
  32. @nice -n 19 $(CC) -c $(CFLAGS) $< -o $@
  33. %.d: %.cc
  34. $(info [MM] $@)
  35. @$(CC) $(CFLAGS) $< -MM -MT $(@:.d=.o) >$@
  36. %.o: %.cc
  37. $(info [CC] $@)
  38. @nice -n 19 $(CC) -c $(CFLAGS) $< -o $@
  39. $(ARNAME): $(SUBDIRS) $(LOCALOBJECTS)
  40. $(info [AR] $@)
  41. @nice -n 19 $(AR) rcuT $@ $(LOCALOBJECTS) $(SUBDIRARS)
  42. .PHONY: $(SUBDIRS)
  43. $(SUBDIRS):
  44. @$(MAKE) -S -C $@ artifacts
  45. .PHONY: all
  46. all: $(TARGETS)
  47. .PHONY: clean
  48. clean:
  49. @for dir in $(SUBDIRS); do \
  50. $(MAKE) -S -C $$dir $@; \
  51. done
  52. @rm -f $(LOCALOBJECTS) $(LOCALDEPENDS) $(ARNAME) $(TARGETS) || true