--- a/Makefile
+++ b/Makefile
@@ -4,17 +4,17 @@
 LIBDIR = $(DESTDIR)/usr/share/games/omega-rpg
 
 ### choose your optimization level
-OFLAGS = -O2 -pipe
+CFLAGS ?= -O2 -pipe
 
 ### One of these should be uncommented, as appropriate, unless your compiler
 ### does it for you.  You can test this by simply trying to 'make' omega -
 ### it will fail if none of them are defined.  If you do uncomment
 ### one, make sure you comment out the other definition of CFLAGS lower down
 
-CFLAGS = -Wall $(OFLAGS) -DBSD # -ansi
-#CFLAGS = -DSYSV $(OFLAGS)
-#CFLAGS = -DMSDOS $(OFLAGS)
-#CFLAGS = -DAMIGA $(OFLAGS)
+OPTS = -DBSD
+#OPTS = -DSYSV
+#OPTS = -DMSDOS
+#OPTS = -DAMIGA
 
 ### CPP should contain the command to run the C preprocessor.
 #CPP = cc -E
@@ -58,8 +58,11 @@
 
 all: maps.dat omega
 
+.c.o:
+	$(CC) $(CFLAGS) $(CPPFLAGS) $(OPTS) $< -c -o $@
+
 omega: $(CUROBJ) $(CLROBJ) $(OBJ)
-	$(CC) $(LDFLAGS) $(OFLAGS) $(CUROBJ) $(CLROBJ) $(OBJ) $(LIBS) -o omega
+	$(CC) $(LDFLAGS) $(CFLAGS) $(CPPFLAGS) $(CUROBJ) $(CLROBJ) $(OBJ) $(LIBS) -o omega
 	#rm date.c date.o
 
 date.c:
@@ -69,7 +72,8 @@
 	cd tools; make
 	cd tools/libsrc; make maps.dat
 
-install: omega maps.dat $(BINDIR) $(LIBDIR)
+install: omega maps.dat
+	mkdir -p $(BINDIR) $(LIBDIR)
 	cp omega $(BINDIR)/omega-rpg
 	chmod 4711 $(BINDIR)/omega-rpg
 	- cp lib/* $(LIBDIR)
@@ -78,7 +82,8 @@
 	chmod 0600 $(LIBDIR)/abyss.txt $(LIBDIR)/scroll[1234].txt $(LIBDIR)/maps.dat
 	chmod 0600 $(LIBDIR)/omega.hi $(LIBDIR)/omega.log $(LIBDIR)/omega.hi.backup
 
-install_not_suid: omega maps.dat $(BINDIR) $(LIBDIR)
+install_not_suid: omega maps.dat
+	mkdir -p $(BINDIR) $(LIBDIR)
 	cp omega $(BINDIR)/omega-rpg
 	chmod 0711 $(BINDIR)/omega-rpg
 	- cp lib/* $(LIBDIR)
@@ -89,13 +94,13 @@
 	chmod 0600 $(LIBDIR)/omega.hi.backup	
 
 clean:
-	rm -f $(OBJ) $(CLROBJ) clrgen.h clrgen.c genclr.o genclr omega
+	rm -f $(OBJ) $(CLROBJ) clrgen.h clrgen.c clrgen.o genclr.o genclr test omega
 	cd tools; $(MAKE) clean
 	cd tools/libsrc; $(MAKE) clean
 	cd lib; $(MAKE) clean
 
 distclean:
-	rm -f $(OBJ) $(CUROBJ) $(TOOLS) $(OLIBSTUFF) clrgen.h clrgen.c genclr.o genclr omega
+	rm -f $(OBJ) $(CUROBJ) $(TOOLS) $(OLIBSTUFF) clrgen.h clrgen.c clrgen.o genclr.o genclr test omega
 	cp lib/omega.hi.backup lib/omega.hi
 	cp lib/omega.log.backup lib/omega.log
 
--- a/tools/makefile
+++ b/tools/makefile
@@ -8,18 +8,19 @@
 # and given names such as 'city.dat'; these names are the passwords which
 # crypt is expecting.
 
-CC = gcc -g -Wall -O2 -ansi
+CC ?= gcc
+CFLAGS ?= -g -Wall -O2 -ansi
 
 all: crypt decrypt makedate
 
 crypt: crypt.c
-	$(CC) $(CFLAGS) crypt.c bwt.c -o crypt
+	$(CC) $(CFLAGS) $(CPPFLAGS) $(LDFLAGS) crypt.c bwt.c -o crypt
 
 decrypt: decrypt.c
-	$(CC) $(CFLAGS) decrypt.c -o decrypt
+	$(CC) $(CFLAGS) $(CPPFLAGS) $(LDFLAGS) decrypt.c -o decrypt
 
 makedate: makedate.c
-	$(CC) $(CFLAGS) makedate.c -o makedate
+	$(CC) $(CFLAGS) $(CPPFLAGS) $(LDFLAGS) makedate.c -o makedate
 
 clean:
 	rm -f crypt decrypt makedate
