Makefile 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  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. SOURCES = $(wildcard *.cpp */*.cpp */*/*.cpp */*/*/*.cpp)
  13. LOCALOBJECT_ = $(LOCALSOURCES:.cpp=.o)
  14. LOCALOBJECTS = $(LOCALOBJECT_:.cc=.o)
  15. OBJECTS = $(SOURCES:.cpp=.o)
  16. LOCALDEPENDS = $(LOCALOBJECTS:.o=.d)
  17. DEPENDS = $(OBJECTS:.o=.d)
  18. TARGETS =
  19. -include Makefile.target
  20. artifacts: $(SUBDIRS) $(LOCALOBJECTS)
  21. ifneq ($(MAKECMDGOALS),clean)
  22. -include $(LOCALDEPENDS)
  23. endif
  24. %.d: %.cpp
  25. @echo [MM] $@
  26. @$(CC) $(CFLAGS) $< -MM -MT $(@:.d=.o) >$@
  27. %.o: %.cpp
  28. @echo [CC] $@
  29. @nice -n 19 $(CC) -c $(CFLAGS) $< -o $@
  30. %.d: %.cc
  31. @echo [MM] $@
  32. @$(CC) $(CFLAGS) $< -MM -MT $(@:.d=.o) >$@
  33. %.o: %.cc
  34. @echo [CC] $@
  35. @nice -n 19 $(CC) -c $(CFLAGS) $< -o $@
  36. $(ARNAME): $(SUBDIRS) $(LOCALOBJECTS)
  37. @echo [AR] $@
  38. @nice -n 19 $(AR) rcuT $@ $(LOCALOBJECTS) $(SUBDIRARS)
  39. $(OBJECTS): | $(SUBDIRS)
  40. .PHONY: $(SUBDIRS)
  41. $(SUBDIRS):
  42. @$(MAKE) -S -C $@ artifacts
  43. .PHONY: all
  44. all: $(TARGETS)
  45. .PHONY: clean
  46. clean:
  47. @for dir in $(SUBDIRS); do \
  48. $(MAKE) -S -C $$dir $@; \
  49. done
  50. @rm -f $(LOCALOBJECTS) $(LOCALDEPENDS) $(ARNAME) $(TARGETS) || true