home *** CD-ROM | disk | FTP | other *** search
/ Tricks of the Windows Gam…ming Gurus (2nd Edition) / Disc2.iso / vc98 / include / basemake.inc < prev    next >
Text File  |  1998-04-25  |  17KB  |  596 lines

  1. #----------------------------------------------------------------------------
  2. #
  3. # Description:
  4. #   Make File Header for BackOffice Software Development Kit
  5. #
  6. # Copyright:
  7. #   Copyright 1986 - 1998 Microsoft Corporation.  All Rights Reserved.
  8. #
  9. #----------------------------------------------------------------------------
  10.  
  11. !ifndef BASEMAKE_INCLUDED       # Prevent multiple inclusions
  12. BASEMAKE_INCLUDED = 1
  13.  
  14.  
  15. #*********************************************
  16. #
  17. # Parameter Checking and Defaults
  18. #
  19. #*********************************************
  20. !ifndef Proj
  21. !     ERROR Component name (Proj) has not been defined.
  22. !endif
  23.  
  24. !ifndef INCLUDE
  25. !   ERROR INCLUDE variable is empty; must include at least system include directory
  26. !endif
  27.  
  28. !ifndef LIB
  29. !   ERROR LIB variable is empty; must include at least system lib directory
  30. !endif
  31.  
  32. !if defined(clean)
  33. $(Proj): Clean
  34. !else
  35. $(Proj): All
  36. !endif
  37.  
  38. !if defined(nodebug)
  39. BLDTYPE=Retail
  40. !endif
  41.  
  42. !if "$(BLDTYPE)" == "Retail" | "$(BLDTYPE)" == "RETAIL" | "$(BLDTYPE)" == "retail" | "$(BLDTYPE)" == "RTL" | "$(BLDTYPE)" == "rtl"
  43. BLDTYPE1=Retail
  44. !else if "$(BLDTYPE)" == "Profile" | "$(BLDTYPE)" == "PROFILE" | "$(BLDTYPE)" == "profile"
  45. BLDTYPE1=Profile
  46. !else if "$(BLDTYPE)" == "Debug" | "$(BLDTYPE)" == "DEBUG" | "$(BLDTYPE)" == "debug" | "$(BLDTYPE)" == "DBG" | "$(BLDTYPE)" == "dbg"
  47. BLDTYPE1=Debug
  48. !else ifndef BLDTYPE
  49. BLDTYPE1=Debug
  50. !else
  51. !   ERROR BLDTYPE must be either Retail, Profile or Debug.
  52. !endif   
  53.  
  54. !if "$(BLDTYPE1)" == "Retail"
  55. nodebug=1
  56. !endif
  57.  
  58. !ifndef PLATFORM
  59. PLATFORM=Win32
  60. !endif   
  61.  
  62. !ifndef CALL
  63. CALL=C
  64. !endif
  65.  
  66. !ifndef PACK
  67. PACK=YES
  68. !endif
  69.  
  70. !ifndef LOG
  71. LOG=YES
  72. !endif
  73.  
  74. !ifndef WARNING_LEVEL
  75. WARNING_LEVEL=3
  76. !endif
  77.  
  78. !ifndef CPU
  79. !ifndef PROCESSOR_ARCHITECTURE
  80. !ERROR CPU and PROCESSOR_ARCHITECTURE variables are empty; at least one must be defined
  81. !endif
  82. CPU=$(PROCESSOR_ARCHITECTURE)
  83. !if "$(CPU)"=="x86" | "$(CPU)"=="X86"
  84. CPU = i386
  85. !endif
  86. !endif
  87.  
  88. !ifndef APPVER
  89. APPVER=4.0
  90. !endif
  91.  
  92. !ifndef USE_EXCHANGE
  93. !include <win32.mak>
  94. !endif
  95.  
  96. # Save build args for any recursive nmakes 
  97. BLDARGS= BLDTYPE=$(BLDTYPE) PLATFORM=$(PLATFORM) LOG=$(LOG) CPU=$(CPU) 
  98.  
  99. #*********************************************
  100. #
  101. # Paths
  102. #
  103. #*********************************************
  104.  
  105. !ifndef BKOFFICE
  106. !ifdef PROJROOT
  107. BKOFFICE=$(PROJROOT)\        # must add trailing backslash
  108. !else
  109. BKOFFICE=\BkOffice\          # assume a reasonable default
  110. !endif
  111. !endif
  112.  
  113. !ifdef MAKEDIRS
  114. MkDest=
  115. !include $(MAKEDIRS)
  116. !else
  117. ResDir=.
  118. ObjDir=.\$(PLATFORM)\$(BLDTYPE1)
  119. IncDir=$(BKOFFICE)Include
  120. LibDir=$(BKOFFICE)Lib
  121.  
  122. INCLUDE=$(ObjDir);$(IncDir);$(INCLUDE);
  123. LIB=$(LibDir);$(LIB);
  124.  
  125. # Win95 doesn't support "&" on command line
  126. MkDest=@for %d in ($(PLATFORM) $(ObjDir)) do @$(COMSPEC) /c if not exist %d md %d
  127.  
  128. !endif
  129.  
  130. #*********************************************
  131. #
  132. # Tools
  133. #
  134. #*********************************************
  135.  
  136. MAKEEXE = nmake
  137. IMPLIB  = lib
  138. CC      = cl
  139. LIBU    = lib
  140. LINK    = link
  141. RC      = rc
  142. MC      = mc
  143. HC      = start /wait hcrtf
  144.  
  145.  
  146. #*********************************************
  147. #
  148. # Flags
  149. #
  150. #*********************************************
  151.  
  152. # CL is for all C and C++ files
  153. #   -WX     Warnings as errors
  154. #   -J      char becomes unsigned char
  155. #   
  156. CL=$(cflags) -c -W$(WARNING_LEVEL) -J -Fo$@ /nologo $(CL)
  157.  
  158. # LFLAGS is for all links
  159. LFLAGS=-NOLOGO -NODEFAULTLIB -machine:$(CPU) -out:$@ -INCREMENTAL:NO -PDB:NONE $(LFLAGS)
  160.  
  161. # DLLFLAGS is for linking DLLs
  162. DLLFLAGS=-DLL -map:$(ObjDir)\$(@B).map $(DLLFLAGS)
  163.  
  164. # LIBFLAGS is for making libraries
  165. LIBFLAGS=-NOLOGO -MACHINE:$(CPU) -out:$@ $(LIBFLAGS) 
  166.  
  167. # RFLAGS is for Windows resources
  168. RFLAGS= -I$(ResDir) -fo$@ -DWIN32 $(noansi) -r -D_WIN32 $(RFLAGS) 
  169.  
  170. # MFLAGS is for the message compiler
  171. MFLAGS=-v -c -s -h $(ObjDir) -r $(ObjDir) -x $(ObjDir) $(MFLAGS)
  172.  
  173. # MRFLAGS is for the resource compiler when used after the message compiler
  174. MRFLAGS=-l 409 -r -x -i$(ObjDir) $(MRFLAGS)
  175.  
  176. # HFLAGS is for the help compiler 
  177. HFLAGS=-xn
  178.  
  179. #---------------------------------------------
  180. # Calling convention Flag
  181. #---------------------------------------------
  182.  
  183. !if "$(CALL)"=="PASCAL"
  184. CL=-Gc $(CL)
  185. !endif
  186.  
  187. #---------------------------------------------
  188. # Function Packaging Flag
  189. #---------------------------------------------
  190.  
  191. !if "$(PACK)" == "YES"
  192. CL=-Gy $(CL)
  193. cDefines=-Gy $(cDefines)
  194. !endif
  195.  
  196. #---------------------------------------------
  197. # Output Redirection
  198. #---------------------------------------------
  199. !if "$(LOG)" == "NO"
  200. LogCmd=
  201. !else
  202. LogCmd= >> $(ObjDir)\$(Proj).Out
  203. !endif 
  204.  
  205. #---------------------------------------------
  206. # Optimization Flags
  207. #---------------------------------------------
  208. !if "$(BLDTYPE1)" == "Retail"
  209. CL=-O2 $(CL)
  210. !else if "$(BLDTYPE1)" == "Profile"
  211. CL=-Od -Z7 -Gh $(CL)
  212. !else
  213. CL=-Od -Z7 $(CL)
  214. !endif
  215.  
  216. #---------------------------------------------
  217. # PLATFORM specific Flags
  218. #---------------------------------------------
  219. !if "$(CPU)" == "I386"
  220. CL = $(CL) -D_X86_=1
  221. scall  = -Gz
  222. lflags   = $(lflags) -align:0x1000
  223. !endif
  224.  
  225. !if "$(CPU)" == "MIPS"
  226. CL = $(CL) -D_MIPS_=1
  227. scall  =
  228. !endif
  229.  
  230. !if "$(CPU)" == "PPC"
  231. CL = $(CL) -D_PPC_=1
  232. scall  =
  233. lflags   = $(lflags) -ignore:4078
  234. !endif
  235.  
  236. !if "$(CPU)" == "ALPHA"
  237. CL = $(CL) -D_ALPHA_=1
  238. scall  =
  239. !endif
  240.  
  241. #---------------------------------------------
  242. # Windows version
  243. #---------------------------------------------
  244. !if "$(APPVER)" == "4.0"
  245. CL = $(CL) -DWINVER=0x0400
  246. rflags=$(rflags) -DWINVER=0x0400
  247. !endif
  248.  
  249. #---------------------------------------------
  250. # Additional MFC Flags
  251. #---------------------------------------------
  252. # Note: we are only using MFC for Exchange Admin
  253. # extension dlls, which must be statically linked to MFC.
  254.  
  255. !ifdef Use_MFC
  256. CL= $(CL) /GX /DSTRICT /DWIN32 /D_WINDOWS /D_MBCS /D_WINDLL 
  257. CL= $(CL) /D_USRDLL -D_AFX_NO_BSTR_SUPPORT /D_AFXDLL
  258.  
  259. !if "$(BLDTYPE1)"=="Debug"
  260. CL= $(CL) /D_DEBUG
  261. !endif
  262.  
  263. !ifdef crtdll                                 # Use DLL CRT? (which is multithreaded)
  264. crtflags = -MD$(DbgLibFlag) $(crtflags)
  265. !elseif defined(crtst) && !defined(crtflags)  # use Single Threaded CRT?
  266. crtflags = -ML$(DbgLibFlag) $(crtflags)
  267. !elseif defined(crtmt)                        # use Multithreaded CRT?
  268. crtflags = -MT$(DbgLibFlag) $(crtflags)
  269. !else                                         # default to crtdll
  270. crtflags = -MD$(DbgLibFlag) $(crtflags)
  271. !endif                                        # ifdef crtdll/else crtst/crtmt/else
  272.  
  273. !endif
  274.  
  275. #---------------------------------------------
  276. # Build Type Flags  (Retail/Debug)
  277. #---------------------------------------------
  278.  
  279. !if "$(BLDTYPE1)"=="Retail"
  280. CL=-DSHIP $(CL)
  281. LFLAGS = $(LFLAGS) -RELEASE
  282. !else if "$(BLDTYPE1)"=="Profile"
  283. CL=-DDEBUG -DTEST -DPROFILE $(CL)
  284. LFLAGS = $(LFLAGS) -DEBUG:mapped,partial -DEBUGTYPE:coff -PROFILE
  285. libs = $(libs) CAP.LIB
  286. !else 
  287. CL=-DDEBUG -DTEST $(CL) 
  288. LFLAGS = $(LFLAGS) -debug:full -debugtype:cv
  289. !endif
  290.  
  291.  
  292. #---------------------------------------------
  293. # Determine CRT Flags
  294. #---------------------------------------------
  295.  
  296. !ifdef crtdll                                 # Use DLL CRT? (which is multithreaded)
  297. crtflags = -DWIN32 $(noansi) -D_WIN32 -D_MT -D_DLL
  298. !elseif defined(crtst) && !defined(crtflags)  # use Single Threaded CRT?
  299. crtflags = -DWIN32 $(noansi) -D_WIN32
  300. !elseif defined(crtmt)                        # use Multithreaded CRT?
  301. crtflags = -DWIN32 $(noansi) -D_WIN32 -D_MT
  302. !else                                         # default to crtdll
  303. crtflags = -DWIN32 $(noansi) -D_WIN32 -D_MT -D_DLL
  304. !endif                                        # ifdef crtdll/else crtst/crtmt/else
  305.  
  306. #---------------------------------------------
  307. # Determine app type Flags (console, gui, or DLL)
  308. #---------------------------------------------
  309.  
  310. !if defined(console)                          # console app
  311. linkflags=$(linkflags) -subsystem:console -entry:mainCRTStartup
  312. !elseif !defined(dll)                         # not a dll, default to gui app
  313. linkflags=$(linkflags) -subsystem:windows -entry:WinMainCRTStartup
  314. !endif                                        # ifdef console/else
  315.  
  316.  
  317.  
  318. #*********************************************
  319. #
  320. # Libraries
  321. #
  322. #*********************************************
  323.  
  324. !if "$(BLDTYPE1)"=="Retail"
  325. DbgLibFlag =
  326. !else
  327. DbgLibFlag = d
  328. !endif
  329.  
  330. #---------------------------------------------
  331. # Back Office SDK specific
  332. #---------------------------------------------
  333. !ifdef USE_SNA
  334. libs=$(libs) fmistr32.lib ihvLink.lib snacli.lib wappc32.lib wcpic32.lib
  335. libs=$(libs) wincsv32.lib winrui32.lib winsli32.lib
  336. !endif # USE_SNA
  337.  
  338. !ifdef USE_SQL
  339. libs=$(libs) ntwdbLib.lib
  340. !endif # USE_SQL
  341.  
  342. !ifdef USE_ODS
  343. libs=$(libs) opends60.lib
  344. !endif # USE_ODS
  345.  
  346. !if defined(USE_MSM) || defined(USE_SMS)
  347. libs=$(libs) smsapi.lib objectty.lib
  348. !endif # USE_MSM || USE_SMS
  349.  
  350. !ifdef USE_NETMON
  351. libs=$(libs) atalk.lib bhmon.lib bhsupp.lib browser.lib filter.lib friendly.lib
  352. libs=$(libs) hexedit.lib llc.lib nal.lib ncp.lib netlogon.lib nmapi.lib
  353. libs=$(libs) parser.lib ppp.lib slbs.lib toolbar.lib
  354. !endif # USE_NETMON
  355.  
  356. !ifdef USE_EXCHANGE
  357. !  ifndef Building_ExchSDK
  358. libs=ExchSDK$(DbgLibFlag).Lib $(libs)
  359. !  endif # Building_ExchSDK
  360.  
  361. libs=$(libs) Mapi32.Lib Uuid.Lib
  362.  
  363. !if "$(WARNING_LEVEL)" != "4"
  364. CL= $(CL) -WX
  365. !endif
  366.  
  367. DLLFLAGS = $(DLLFLAGS) -def:$(@B).def
  368. !endif # USE_EXCHANGE
  369.  
  370. #---------------------------------------------
  371. # Determine CRT Libraries
  372. #---------------------------------------------
  373. libc = libc$(DbgLibFlag).lib oldnames.lib
  374. libcmt = libcmt$(DbgLibFlag).lib oldnames.lib
  375. libcdll = msvcrt$(DbgLibFlag).lib oldnames.lib
  376.  
  377. !ifdef crtdll                                 # Use DLL CRT?
  378. libcrt=$(libcdll)
  379. !elseif defined(crtst) && !defined(crtflags)  # use Single Threaded CRT?
  380. libcrt=$(libc)
  381. !elseif defined(crtmt)                        # use Multithreaded CRT?
  382. libcrt=$(libcmt)
  383. !else                                         # default to crtdll
  384. libcrt=$(libcdll)
  385. !endif                                        # endif crtdll/else crtst/crtmt/else
  386.  
  387. #---------------------------------------------
  388. # Determine app type libraries (console, gui, or DLL)
  389. #---------------------------------------------
  390.  
  391. !ifdef dll                                    # is this a DLL?
  392. linklibs=$(libs) kernel32.lib advapi32.lib user32.lib gdi32.lib comctl32.lib comdlg32.lib ole32.lib winspool.lib version.lib
  393. !elseif defined(console)                      # not a DLL, perhaps a console app
  394. linklibs=$(libs) kernel32.lib advapi32.lib user32.lib ole32.lib version.lib
  395. !else                                         # default to gui app
  396. linklibs=$(libs) kernel32.lib $(optlibs) advapi32.lib user32.lib gdi32.lib comdlg32.lib ole32.lib winspool.lib version.lib
  397. !endif                                        # ifdef dll/else console/else
  398.  
  399. LinkLibs = $(LibList) $(linklibs) $(libcrt)
  400.  
  401. !if "$(BLDTYPE1)" == "Profile"
  402. LinkLibs = $(LinkLibs) cap.lib
  403. !endif
  404.  
  405.  
  406. #---------------------------------------------
  407. # Additional MFC Libraries
  408. #---------------------------------------------
  409. # Note that linking order is important when using MFC!
  410.  
  411. !ifdef Use_MFC
  412. linklibs = mfcs40$(DbgLibFlag).lib mfc40$(DbgLibFlag).lib $(linklibs)
  413. !endif
  414.  
  415.  
  416. #*********************************************
  417. #
  418. # Inference Rules
  419. #
  420. #*********************************************
  421. .SUFFIXES:
  422. .SUFFIXES: .c .cpp .obj .def .lib .dll .exe .mc .rc .res .exp .bin .hpj
  423.  
  424. # C Targets
  425. .c{$(ObjDir)\}.obj:
  426.     $(MkDest)
  427. !if "$(LOG)"=="YES"
  428.     @echo $(CC) $(CL) $(crtflags) $(cDefines) $< $(LogCmd)
  429. !endif
  430.     $(CC) $(CL) $(crtflags) $(cDefines) $< $(LogCmd)
  431.  
  432. # C++ Targets
  433. .cpp{$(ObjDir)\}.obj:
  434.     $(MkDest)
  435. !if "$(LOG)"=="YES"
  436.     @echo $(CC) $(CL) $(crtflags) $(cDefines) $< $(LogCmd)
  437. !endif
  438.     $(CC) $(CL) $(crtflags) $(cDefines) $< $(LogCmd)
  439.  
  440. # Resource Targets from .RC files
  441. {$(ResDir)\}.rc{$(ObjDir)\}.res:
  442.     $(MkDest)
  443. !if "$(LOG)"=="YES"
  444.     @echo $(RC) $(RFLAGS) $(ResDir)\$(@B).rc $(LogCmd)
  445. !endif
  446.     $(RC) $(RFLAGS) $(ResDir)\$(@B).rc $(LogCmd)
  447.  
  448. # Resource Targets from .MC files
  449. .mc{$(ObjDir)\}.res:
  450.     $(MkDest)
  451. !if "$(LOG)"=="YES"
  452.     @echo $(MC) $(MFLAGS) $< $(LogCmd)
  453. !endif
  454.     $(MC) $(MFLAGS) $< $(LogCmd)
  455. !if "$(LOG)"=="YES"
  456.     @echo $(RC) $(MRFLAGS) -fo$@ $(ObjDir)\$(@B).rc $(LogCmd)
  457. !endif
  458.     $(RC) $(MRFLAGS) -fo$@ $(ObjDir)\$(@B).rc $(LogCmd)
  459.  
  460. # Import Libraries
  461. .def{$(ObjDir)\}.lib:
  462. !if "$(LOG)"=="YES"
  463.     @echo $(IMPLIB) -NOLOGO -MACHINE:$(CPU) -DEF:$(@B).DEF -OUT:$@ $(LogCmd)
  464. !endif
  465.     $(IMPLIB) -NOLOGO -MACHINE:$(CPU) -DEF:$(@B).DEF -OUT:$@ $(LogCmd)
  466.     xcopy $@ $(LibDir)\ $(LogCmd)
  467.  
  468. .def{$(ObjDir)\}.exp:
  469. !if "$(LOG)"=="YES"
  470.     @echo $(IMPLIB) -NOLOGO -MACHINE:$(CPU) -DEF:$(@B).DEF -OUT:$(@R).Lib $(LogCmd)
  471. !endif
  472.     $(IMPLIB) -NOLOGO -MACHINE:$(CPU) -DEF:$(@B).DEF -OUT:$(@R).Lib $(LogCmd)
  473.  
  474. # Static Libraries
  475. {$(ObjDir)\}.obj{$(ObjDir)\}.lib:
  476. !if "$(LOG)"=="YES"
  477.     @echo $(LIBU) $(LIBFLAGS)  $** $(LogCmd)
  478. !endif
  479.     $(LIBU) $(LIBFLAGS) $** $(LogCmd)
  480. !if "$(LOG)"=="YES"
  481.     @echo xcopy $@ $(LibDir) $(LogCmd)
  482. !endif
  483.     xcopy $@ $(LibDir)\ $(LogCmd)
  484.  
  485. # DLLs
  486. {$(ObjDir)\}.obj{$(ObjDir)\}.dll:
  487.     @echo $** > $(ObjDir)\objfiles.lst
  488.     @echo $(LinkLibs) > $(ObjDir)\libfiles.lst
  489. !if "$(LOG)"=="YES"
  490.     @echo   $(LINK) $(LFLAGS) $(DLLFLAGS) $(linkflags) @$(ObjDir)\objfiles.lst @$(ObjDir)\libfiles.lst $(LogCmd)
  491. !endif
  492.     $(LINK) $(LFLAGS) $(DLLFLAGS) $(linkflags) @$(ObjDir)\objfiles.lst @$(ObjDir)\libfiles.lst $(LogCmd)
  493. !if "$(LOG)"=="YES"
  494.     @echo xcopy $(@R).lib $(LibDir) $(LogCmd)
  495. !endif
  496.     -xcopy $(@R).lib $(LibDir)\ $(LogCmd)
  497.  
  498. # BINs
  499. {$(ObjDir)\}.obj{$(ObjDir)\}.bin:
  500.     @echo $(LinkLibs) > $(ObjDir)\libfiles.lst
  501. !if "$(LOG)"=="YES"
  502.     @echo $(LINK) $(LFLAGS) $(linkflags) $** @$(ObjDir)\libfiles.lst $(LogCmd)
  503. !endif
  504.     $(LINK) $(LFLAGS) $(linkflags) $** @$(ObjDir)\libfiles.lst $(LogCmd)
  505.  
  506. # EXEs
  507. {$(ObjDir)\}.obj{$(ObjDir)\}.exe:
  508.     @echo $** > $(ObjDir)\objfiles.lst
  509.     @echo $(LinkLibs) > $(ObjDir)\libfiles.lst
  510. !if "$(LOG)"=="YES"
  511.     @echo $(LINK) $(LFLAGS) $(linkflags) @$(ObjDir)\objfiles.lst @$(ObjDir)\libfiles.lst $(LogCmd)
  512. !endif
  513.     $(LINK) $(LFLAGS) $(linkflags) @$(ObjDir)\objfiles.lst @$(ObjDir)\libfiles.lst $(LogCmd)
  514.  
  515. # Helpfiles
  516. .hpj{$(ObjDir)\}.hlp:
  517.     $(MkDest)
  518. !if "$(LOG)"=="YES"
  519.     @echo  $(HC) $(HFLAGS) $(@B).Hpj
  520. !endif
  521.     $(HC) $(HFLAGS) $(@B).Hpj
  522. !if "$(LOG)"=="YES"
  523.     @echo   xcopy $(@F) $(ObjDir)
  524. !endif
  525.     -xcopy $(@F) $(ObjDir) $(LogCmd)
  526.  
  527. #*********************************************
  528. #
  529. # Make Targets
  530. #
  531. #*********************************************
  532.  
  533. #---------------------------------------------
  534. # List Output Files
  535. #---------------------------------------------
  536. ListDir:
  537.     dir $(ObjDir)
  538.  
  539. #---------------------------------------------
  540. # Display Output Listing File
  541. #---------------------------------------------
  542. !ifndef ERRVIEW
  543. ERRVIEW=start notepad.exe
  544. !endif
  545.  
  546. ListOut:
  547.     $(ERRVIEW) $(ObjDir)\$(Proj).out
  548.  
  549. #---------------------------------------------
  550. # Delete Output Listing File
  551. #---------------------------------------------
  552. DelOut:
  553.     del $(ObjDir)\$(Proj).out
  554.  
  555. #---------------------------------------------
  556. # Clean Output Directories
  557. #---------------------------------------------
  558. clean:
  559.  $(MkDest)
  560. !if "$(OS)" == "Windows_NT"
  561.  del /q $(ObjDir)\*.obj \
  562.         $(ObjDir)\*.out \
  563.         $(ObjDir)\*.h   \
  564.         $(ObjDir)\*.dbg \
  565.         $(ObjDir)\*.lib \
  566.         $(ObjDir)\*.exe \
  567.         $(ObjDir)\*.dll \
  568.         $(ObjDir)\*.map \
  569.         $(ObjDir)\*.res \
  570.         $(ObjDir)\*.rc  \
  571.         $(ObjDir)\*.bin \
  572.         $(ObjDir)\*.lst \
  573.         $(ObjDir)\*.blt \
  574.         $(ObjDir)\*.hlp \
  575.         $(ObjDir)\*.srl \
  576.         $(ObjDir)\*.exp >NUL 2>NUL
  577. !else  # Win95 doesn't support "2>" on command line, multiple files on a Del command, or /q
  578.  erase  $(ObjDir)\*.obj >NUL
  579.  erase  $(ObjDir)\*.out >NUL
  580.  erase  $(ObjDir)\*.h   >NUL
  581.  erase  $(ObjDir)\*.dbg >NUL
  582.  erase  $(ObjDir)\*.lib >NUL
  583.  erase  $(ObjDir)\*.exe >NUL
  584.  erase  $(ObjDir)\*.dll >NUL
  585.  erase  $(ObjDir)\*.map >NUL
  586.  erase  $(ObjDir)\*.res >NUL
  587.  erase  $(ObjDir)\*.rc  >NUL
  588.  erase  $(ObjDir)\*.bin >NUL
  589.  erase  $(ObjDir)\*.lst >NUL
  590.  erase  $(ObjDir)\*.blt >NUL
  591.  erase  $(ObjDir)\*.hlp >NUL
  592.  erase  $(ObjDir)\*.srl >NUL
  593.  erase  $(ObjDir)\*.exp >NUL
  594. !endif  # OS == Windows_NT
  595. !endif      # BASEMAKE_INCLUDED
  596.