diff --git a/src/sbbs3/Makefile.bor b/src/sbbs3/Makefile.bor
index fd4ca323b7d6c40e32d640c5aeff495d5e37b74a..d0c16688b25e13d138a5b36d5a92b42518a2ec91 100644
--- a/src/sbbs3/Makefile.bor
+++ b/src/sbbs3/Makefile.bor
@@ -16,10 +16,13 @@ CC		=	bcc32
 LD		=	ilink32
 SLASH	=	\\
 OFILE	=	obj
+LIBFILE	=	.dll
+EXEFILE	=	.exe
 LIBODIR	=	bcc.win32.dll	# Library output directory
 EXEODIR =	bcc.win32.exe	# Executable output directory
 CFLAGS	=	-M
 LFLAGS  =	-m -s -c -Tpd -Gi -I$(LIBODIR)
+DELETE	=	echo y | del 
 
 # Optional compile flags (disable banner, warnings and such)
 CFLAGS	=	$(CFLAGS) -q -d -H -X- -w-csu -w-pch
@@ -35,22 +38,13 @@ LIBODIR	=	$(LIBODIR).release
 EXEODIR	=	$(EXEODIR).release
 !endif
 
-SBBS	=	$(LIBODIR)\sbbs.dll 
-FTPSRVR	=	$(LIBODIR)\ftpsrvr.dll
-MAILSRVR=	$(LIBODIR)\mailsrvr.dll
-BAJA	=	$(EXEODIR)\baja.exe
-FIXSMB	=	$(EXEODIR)\fixsmb.exe
-CHKSMB	=	$(EXEODIR)\chksmb.exe
-SMBUTIL	=	$(EXEODIR)\smbutil.exe
-
-ALL: $(LIBODIR) $(EXEODIR) \
-	$(SBBS) $(FTPSRVR) $(MAILSRVR) \
-	$(FIXSMB) $(CHKSMB) $(SMBUTIL) $(BAJA)
-
+!include targets.mak	# defines all targets
 !include objects.mak	# defines $(OBJS)
 !include headers.mak	# defines $(HEADERS)
 !include sbbsdefs.mak	# defines $(SBBSDEFS)
 
+SBBSLIB	=	$(LIBODIR)\sbbs.lib
+
 # Implicit C Compile Rule for SBBS.DLL
 {.}.c.$(OFILE):
 	@echo Compiling (I) $< to $@ ...
@@ -68,20 +62,20 @@ $(EXEODIR):
 	mkdir $(EXEODIR)
 
 # SBBS DLL Link Rule
-$(SBBS): $(OBJS) $(LIBODIR)\ver.$(OFILE)
+$(SBBS) $(SBBSLIB): $(OBJS) $(LIBODIR)\ver.$(OFILE)
     @echo Linking $< ...
 	$(LD) $(LFLAGS) c0d32.obj $(OBJS) $(LIBODIR)\ver.$(OFILE), $*, $*, \
 		import32.lib cw32mt.lib ws2_32.lib
 
 # Mail Server DLL Link Rule
-$(MAILSRVR): mailsrvr.c mxlookup.c
+$(MAILSRVR): mailsrvr.c mxlookup.c $(SBBSLIB)
     @echo Compiling $** ...
-	$(CC) $(CFLAGS) -WD -WM -lGi -n$(LIBODIR) -DMAILSRVR_EXPORTS $** $(LIBODIR)\sbbs.lib
+	$(CC) $(CFLAGS) -WD -WM -lGi -n$(LIBODIR) -DMAILSRVR_EXPORTS -DSMBDLL $**
 
 # FTP Server DLL Link Rule
-$(FTPSRVR): ftpsrvr.c
+$(FTPSRVR): ftpsrvr.c $(SBBSLIB)
     @echo Compiling $** ...
-	$(CC) $(CFLAGS) -WD -WM -lGi -n$(LIBODIR) -DFTPSRVR_EXPORTS $** $(LIBODIR)\sbbs.lib
+	$(CC) $(CFLAGS) -WD -WM -lGi -n$(LIBODIR) -DFTPSRVR_EXPORTS $**
 
 # Baja Utility
 $(BAJA): baja.c ars.c
diff --git a/src/sbbs3/Makefile.gnu b/src/sbbs3/Makefile.gnu
index 507bd54f6afda0f7ed78dd647280944ff9a11516..a8318367b02f6a301996a46bbe9e67442887082a 100644
--- a/src/sbbs3/Makefile.gnu
+++ b/src/sbbs3/Makefile.gnu
@@ -20,22 +20,26 @@ OFILE	=	o
 ifeq ($(os),win32)	# Windows
 
 LD		=	dllwrap
-LFILE	=	dll
+LIBFILE	=	.dll
+EXEFILE	=	.exe
 LIBODIR	:=	gcc.win32.dll
 EXEODIR	:=	gcc.win32.exe
 LIBDIR	:=	/gcc/i386-mingw32/lib
 CFLAGS	:=	-mno-cygwin
 LFLAGS  :=	--target=i386-mingw32 -mno-cygwin
+DELETE	=	echo y | del 
 
 else	# Linux
 
 LD		=	ld
-LFILE	=	a
+LIBFILE	=	.a
+EXEFILE	=	
 LIBODIR	:=	gcc.linux.lib
 EXEODIR	:=	gcc.linux.exe
 LIBDIR	:=	/usr/lib
 CFLAGS	:=	
 LFLAGS  :=	
+DELETE	=	rm -f -v
 
 endif
 
@@ -49,19 +53,12 @@ LIBODIR	:=	$(LIBODIR).release
 EXEODIR	:=	$(EXEODIR).release
 endif
 
-SBBS	=	$(LIBODIR)/sbbs.$(LFILE)
-
-FTPSRVR	=	$(LIBODIR)/ftpsrvr.$(LFILE)
-
-MAILSRVR=	$(LIBODIR)/mailsrvr.$(LFILE)
-
-SBBSLIB	=	$(LIBODIR)/sbbs.a
-
-ALL: $(LIBODIR) $(SBBS) $(FTPSRVR) $(MAILSRVR)
-
+include targets.mak		# defines all targets
 include objects.mak		# defines $(OBJS)
 include headers.mak		# defines $(HEADERS)
 include sbbsdefs.mak	# defines $(SBBSDEFS)
+
+SBBSLIB	=	$(LIBODIR)/sbbs.a
 	
 LIBS	=	$(LIBDIR)/libwsock32.a $(LIBDIR)/libwinmm.a
 
@@ -73,13 +70,17 @@ $(LIBODIR)/%.o : %.c
 $(LIBODIR)/%.o : %.cpp
 	$(CC) $(CFLAGS) -c $(SBBSDEFS) $< -o $@
 
-# Create output directory
+# Create output directories
 $(LIBODIR):
 	mkdir $(LIBODIR)
 
+$(EXEODIR):
+	mkdir $(EXEODIR)
+
+
 # SBBS Link Rule
-$(SBBS): $(OBJS) $(LIBODIR)/ver.o
-	$(LD) $(LFLAGS) -o $@ $^ $(LIBS) --output-lib $(SBBSLIB)
+$(SBBS) $(SBBSLIB): $(OBJS) $(LIBODIR)/ver.o
+	$(LD) $(LFLAGS) -o $(SBBS) $^ $(LIBS) --output-lib $(SBBSLIB)
 
 # FTP Server Link Rule
 $(FTPSRVR): $(LIBODIR)/ftpsrvr.o $(SBBSLIB)
@@ -99,4 +100,21 @@ $(LIBODIR)/mailsrvr.o: mailsrvr.c mailsrvr.h
 $(LIBODIR)/mxlookup.o: mxlookup.c
 	$(CC) $(CFLAGS) -c -DMAILSRVR_EXPORTS $< -o $@		
 
+# Baja Utility
+$(BAJA): baja.c ars.c
+	$(CC) $(CFLAGS) -o $@ $^
+
+# FIXSMB Utility
+$(FIXSMB): fixsmb.c smblib.c smbwrap.c
+	$(CC) $(CFLAGS) -o $@ $^
+
+# CHKSMB Utility
+$(CHKSMB): chksmb.c smblib.c smbwrap.c
+	$(CC) $(CFLAGS) -o $@ $^
+
+# SMB Utility
+$(SMBUTIL): smbutil.c smblib.c smbwrap.c smbtxt.c lzh.c
+	$(CC) $(CFLAGS) -o $@ $^
+
+
 include depends.mak
\ No newline at end of file
diff --git a/src/sbbs3/targets.mak b/src/sbbs3/targets.mak
new file mode 100644
index 0000000000000000000000000000000000000000..d5a951a74d8e6532e1ecc6956622190e111abfae
--- /dev/null
+++ b/src/sbbs3/targets.mak
@@ -0,0 +1,23 @@
+# targets.mak
+
+# Make 'include file' defining targets for Synchronet project
+
+# $Id$
+
+# LIBODIR, EXEODIR, SLASH, LIBFILE, EXEFILE, and DELETE must be pre-defined
+
+SBBS	=	$(LIBODIR)$(SLASH)sbbs$(LIBFILE) 
+FTPSRVR	=	$(LIBODIR)$(SLASH)ftpsrvr$(LIBFILE)
+MAILSRVR=	$(LIBODIR)$(SLASH)mailsrvr$(LIBFILE)
+BAJA	=	$(EXEODIR)$(SLASH)baja$(EXEFILE)
+FIXSMB	=	$(EXEODIR)$(SLASH)fixsmb$(EXEFILE)
+CHKSMB	=	$(EXEODIR)$(SLASH)chksmb$(EXEFILE)
+SMBUTIL	=	$(EXEODIR)$(SLASH)smbutil$(EXEFILE)
+
+all: $(LIBODIR) $(EXEODIR) \
+	 $(SBBS) $(FTPSRVR) $(MAILSRVR) \
+	 $(FIXSMB) $(CHKSMB) $(SMBUTIL) $(BAJA)
+
+clean:
+	$(DELETE) $(LIBODIR)
+	$(DELETE) $(EXEODIR)
\ No newline at end of file