git » unicorn-sparkle-basic.git » commit 717a593

improve makefile, leverage auto deps

author Alan Dipert
2024-04-29 20:53:37 UTC
committer Alan Dipert
2024-04-29 20:53:37 UTC
parent ba5bd88f32e65e02b0d70fed4b316ddd1e1d1f8c

improve makefile, leverage auto deps

.gitignore +1 -0
Makefile +35 -22

diff --git a/.gitignore b/.gitignore
index 629005b..2a1445c 100644
--- a/.gitignore
+++ b/.gitignore
@@ -4,3 +4,4 @@ usbasic.tab.h
 usbasic
 *.o
 *~
+*.d
diff --git a/Makefile b/Makefile
index 2e7d9ac..cd24c44 100644
--- a/Makefile
+++ b/Makefile
@@ -1,49 +1,62 @@
-.PHONY: push format
+.PHONY: all clean format push
 
 CC=gcc
 CFLAGS=-Wall -g
 LEX=flex
 YACC=bison
 YFLAGS=-d
+DEPFLAGS=-MT $@ -MMD -MP -MF $*.Td
+
+POSTCOMPILE = @mv -f $*.Td $*.d && touch $@
 
 all: usbasic
 
 usbasic: lex.yy.o usbasic.tab.o types.o parse.o vec.o lines.o main.o
-	$(CC) $(CFLAGS) -o usbasic lex.yy.o usbasic.tab.o types.o parse.o vec.o lines.o main.o -lgc -lfl -lreadline -lhistory
-
-lines.o: lines.c lines.h vec.h usbasic.tab.h parse.h
-	$(CC) $(CFLAGS) -c lines.c
+	$(CC) $(CFLAGS) -o $@ $^ -lgc -lfl -lreadline -lhistory
 
-vec.o: vec.c vec.h
-	$(CC) $(CFLAGS) -c vec.c
+# Dependencies due to usbasic.tab.h
+parse.o: parse.c parse.h usbasic.tab.h
+	$(CC) $(CFLAGS) $(DEPFLAGS) -c $< -o $@
+	$(POSTCOMPILE)
 
-types.o: types.c types.h
-	$(CC) $(CFLAGS) -c types.c
+lines.o: lines.c lines.h vec.h usbasic.tab.h
+	$(CC) $(CFLAGS) $(DEPFLAGS) -c $< -o $@
+	$(POSTCOMPILE)
 
-parse.o: parse.c usbasic.tab.h parse.h types.h types.c
-	$(CC) $(CFLAGS) -c parse.c
+main.o: main.c usbasic.tab.h
+	$(CC) $(CFLAGS) $(DEPFLAGS) -c $< -o $@
+	$(POSTCOMPILE)
 
-main.o: main.c usbasic.tab.h parse.h vec.h
-	$(CC) $(CFLAGS) -c main.c
+# General compilation rule for C files
+%.o: %.c %.d
+	$(CC) $(CFLAGS) $(DEPFLAGS) -c $< -o $@
+	$(POSTCOMPILE)
 
+# Lexer and parser rules ensuring order
 lex.yy.o: lex.yy.c usbasic.tab.h
-	$(CC) $(CFLAGS) -c lex.yy.c
+	$(CC) $(CFLAGS) -c $< -o $@
 
-usbasic.tab.o: usbasic.tab.c
-	$(CC) $(CFLAGS) -c usbasic.tab.c
+lex.yy.c: usbasic.l | usbasic.tab.h
+	$(LEX) $<
 
-lex.yy.c: usbasic.l
-	$(LEX) usbasic.l
+usbasic.tab.o: usbasic.tab.c usbasic.tab.h
+	$(CC) $(CFLAGS) -c $< -o $@
 
 usbasic.tab.c usbasic.tab.h: usbasic.y
-	$(YACC) $(YFLAGS) usbasic.y
+	$(YACC) $(YFLAGS) $<
 
 clean:
-	rm -f usbasic lex.yy.c usbasic.tab.c usbasic.tab.h *.o
+	rm -f usbasic lex.yy.c usbasic.tab.c usbasic.tab.h *.o *.d *.Td
 
-format: main.c parse.h parse.c lines.h lines.c types.h types.c vec.h vec.c
-	clang-format -i $^
+format:
+	clang-format -i main.c parse.h parse.c lines.h lines.c types.h types.c vec.h vec.c
 
 push:
 	git push
 	ssh dreamhost ./git-arr-0.30/git-arr --config ./git-arr-0.30/tailrecursion.conf generate --output ./tailrecursion.com/git-arr
+
+DEPFILES := $(wildcard *.d)
+-include $(DEPFILES)
+
+%.d: ;
+%.Td: ;