proj=tdo # Compiler options CC=gcc CFLAGS=-std=c17 -Wall -Werror -g # Directory paths srcdir:=src bindir:=bin objdir:=obj # Files srcfiles=$(filter-out $(srcdir)/main.c,$(wildcard $(srcdir)/*.c)) objfiles=$(srcfiles:.c=.o) .PHONY: build build: $(bindir)/$(proj) .PHONY: clean clean: -rm -r $(bindir) $(objdir) .PHONY: info info: @echo srcfiles: $(srcfiles) @echo objfiles: $(objfiles) .PHONY: run run: build $(bindir)/$(proj) # Make directories $(bindir): mkdir $@ $(objdir): mkdir $@ # Create object files $(objdir)/%.o: $(objdir) $(srcfiles) $(CC) $(CFLAGS) -o $@ -c $(patsubst %.o,$(srcdir)/%.c,$(notdir $@)) # Build executable including any object files $(bindir)/$(proj): $(bindir) $(objfiles) $(srcdir)/main.c $(CC) $(CFLAGS) -o $@ $(filter-out $<,$^)