Listing 6 Borland-compatible makefile for the sample application and DLL

EXENAME=testapp
DLLNAME=testlib

all: $(EXENAME).exe $(DLLNAME).dll

#### APPLICATION DEPENDENCY SECTION ####

APPOBJS=testapp.obj

$(EXENAME).exe: $(EXENAME).def $(EXENAME).res $(APPOBJS)
  tlink /Tw c0Wm $(APPOBJS), $(EXENAME),,IMPORT CWM, $(EXENAME).DEF
  rc $(EXENAME).RES

$(EXENAME).def: makefile
  copy &&|
NAME         $(EXENAME)
DESCRIPTION  'Test Application'
EXETYPE      WINDOWS
STUB         'WINSTUB.EXE'
CODE         PRELOAD MOVEABLE DISCARDABLE
DATA         PRELOAD MOVEABLE SINGLE
HEAPSIZE     5120
STACKSIZE    5120
| $(EXENAME).def

$(EXENAME).res: $(EXENAME).rc $(EXENAME).h
  rc -r -Ic:\bc\include $(EXENAME).rc

testapp.obj: testapp.cpp testapp.h testenum.h
  bcc -mm -WE -c testapp.cpp

#### DLL DEPENDENCY SECTION ####

DLLOBJS=testlib.obj

$(DLLNAME).dll: $(DLLOBJS) $(DLLNAME).def
    tlink /Twd c0dL $(DLLOBJS),$(DLLNAME),,cwl import,$(DLLNAME).def

$(DLLNAME).def: makefile
  copy &&|
LIBRARY      $(DLLNAME)
EXETYPE      WINDOWS
STUB         'WINSTUB.EXE'
DESCRIPTION  'Test Lib'
CODE         PRELOAD MOVEABLE DISCARDABLE
DATA         PRELOAD MOVEABLE SINGLE
HEAPSIZE     4096
| $(DLLNAME).def

testlib.obj: testlib.cpp testenum.h
  bcc -c -WDE -ml! testlib.cpp