-wordgame: wordgame.o
- $(CC) $(CFLAGS) $(LDFLAGS) -lreadline -lm -o $@ $^
+WGCFLAGS=-Wall -Wextra -Wmissing-prototypes -Wno-unused-parameter -Wno-sign-compare `pkg-config --cflags goocanvas`
+FANCYLIBS=`pkg-config --libs goocanvas`
+
+PROGRAMS=grid4 grid5 drill2 rack rack-fancy
+all: $(PROGRAMS)
+
+LIBRARY=bag.o dict.o grid.o word-game.o
+FANCYLIBRARY=demo-item.o
+
+%: %.o $(LIBRARY)
+ $(CC) $(CFLAGS) $(WGCFLAGS) $(LDFLAGS) -lreadline -lm -o $@ $^
+
+%-fancy: %-fancy.o $(LIBRARY) $(FANCYLIBRARY)
+ $(CC) $(CFLAGS) $(WGCFLAGS) $(LDFLAGS) $(FANCYLIBS) -lreadline -lm -o $@ $^
+
+%.o: %.c
+ $(CC) $(CFLAGS) $(WGCFLAGS) -c -o $@ $<
+
+Makefile.dep: *.c
+ $(CC) -M $(CPPFLAGS) $(WGCFLAGS) $^ > $@
+-include Makefile.dep
+
+.PHONY: clean
+clean:
+ rm -f $(PROGRAMS) *.o Makefile.dep