Advertisement
LBPHacker

Autodependencies

May 14th, 2016
100
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Make 1.06 KB | None | 0 0
  1. PRODUCT := chill
  2. SRCDIR := src
  3. DEPDIR := dep
  4. BINDIR := bin
  5. OBJDIR := obj
  6.  
  7. CC := gcc
  8. CCEXT := c
  9. CCFLAGS := -Wall -std=c11
  10. # CCFLAGS := -Wall -Ofast -std=c11
  11.  
  12. FILES := $(shell find $(SRCDIR) -name *.$(CCEXT))
  13.  
  14. $(PRODUCT): $(patsubst %,$(OBJDIR)/%.o,$(subst /,__,$(patsubst $(SRCDIR)/%,%,$(FILES))))
  15.     @$(CC) -o $(BINDIR)/$(PRODUCT) $(patsubst %,$(OBJDIR)/%.o,$(subst /,__,$(patsubst $(SRCDIR)/%,%,$(FILES)))) $(CCFLAGS)
  16.  
  17. -include $(patsubst %,$(DEPDIR)/%.dep,$(subst /,__,$(patsubst $(SRCDIR)/%,%,$(FILES))))
  18.  
  19. $(OBJDIR)/%.$(CCEXT).o:
  20.     @$(eval CPATH := $(patsubst %,$(SRCDIR)/%,$(subst __,/,$*.$(CCEXT))))
  21.     @$(eval DPATH := $(patsubst %,$(DEPDIR)/%,$*.$(CCEXT)).dep)
  22.     @$(CC) $(CCFLAGS) -c $(CPATH) -o $(OBJDIR)/$*.$(CCEXT).o
  23.     @$(CC) $(CCFLAGS) -MM $(CPATH) > $(DPATH)
  24.     @mv -f $(DPATH) $(DPATH).tmp
  25.     @sed -e 's|.*:|$(OBJDIR)/$*.$(CCEXT).o:|' < $(DPATH).tmp > $(DPATH)
  26.     @sed -e 's/.*://' -e 's/\\$$//' < $(DPATH).tmp | fmt -1 | \
  27.       sed -e 's/^ *//' -e 's/$$/:/' >> $(DPATH)
  28.     @rm -f $(DPATH).tmp
  29.  
  30. clean:
  31.     @rm -f $(BINDIR)/$(PRODUCT) $(OBJDIR)/*.o $(DEPDIR)/*.dep
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement