home *** CD-ROM | disk | FTP | other *** search
/ Tricks of the Windows Gam…ming Gurus (2nd Edition) / Disc2.iso / vc98 / mfc / src / makefile < prev    next >
Makefile  |  1998-06-16  |  18KB  |  692 lines

  1. # Makefile : Builds a Microsoft Foundation Class library variant.
  2. #
  3. # This is a part of the Microsoft Foundation Classes C++ library.
  4. # Copyright (C) 1992-1998 Microsoft Corporation
  5. # All rights reserved.
  6. #
  7. # This source code is only intended as a supplement to the
  8. # Microsoft Foundation Classes Reference and related
  9. # electronic documentation provided with the library.
  10. # See these sources for detailed information regarding the
  11. # Microsoft Foundation Classes product.
  12. #
  13. # Usage: NMAKE CLEAN        (removes all intermediary files)
  14. #    or: NMAKE options      (builds one library variant (see below))
  15. # Note that an NMAKE CLEAN should be performed before building a new variant.
  16. #
  17. # 'Options' are one of each of:
  18. #   "DLL"              (defaults to 0)
  19. #           If this item is 0, then a normal library is generated.
  20. #                       DLL=1 is obsolete and not supported by this release.
  21. #           If this item is 2, objects suitable for the shared DLL version
  22. #           of MFC are created.  Note: DLL=2 is to be used only from
  23. #           MFCDLL.MAK, MFCOLE.MAK, or MFCDB.MAK
  24. #
  25. #   "DEBUG"             (defaults to 1)
  26. #           If this item is 1, debugging support is compiled into
  27. #           the library.  If this item is 0, then debugging support
  28. #           is disabled.  Debug support does not include CodeView information.
  29. #
  30. #   "CODEVIEW"          (defaults to 1 for DEBUG=1, 0 for DEBUG=0)
  31. #           If this item is 1 CodeView information is compiled into
  32. #           the library.  You must use the /DEBUG:FULL and /DEBUGTYPE:cv link
  33. #           options when linking your executable. A value of 0 indicates that
  34. #           no CodeView information is to be generated.
  35. #
  36. #   "OBJ=.\obj"         (defaults to '$$(MODEL)$(BASE)$(DEBUG)')
  37. #           This optional specification specifies where temporary OBJ files
  38. #           are stored during the build process.  The directory is created or
  39. #           removed as necessary.
  40. #
  41. #   "OPT="              (no default value)
  42. #           This allows additional compiler options to be added to the build.
  43. #           If more than one switch is desired, put double-quotes around the
  44. #           whole OPT= argument, e.g., "OPT=/J /W3".
  45. #
  46. #   "NO_PCH=1"
  47. #           Set this item to override the default use of precompiled headers.
  48. #
  49. #   "NO_PDB=1"
  50. #           Set this item to override the default use of PDB files.
  51. #
  52. #   "BROWSE=1"          (defaults to 0)
  53. #           Set this option to build the browse database for the MFC
  54. #           library.  By setting BROWSE=1, both the .SBRs and the .BSC
  55. #           files will be built along with the .OBJ and .LIB files that
  56. #           are part of the normal build process.
  57. #
  58. #   "BROWSEONLY=1"      (defaults to 0)
  59. #           Set this option to build the browse files without re-building
  60. #           the MFC library itself.  Note: This option is used internally
  61. #           when BROWSE=1 is selected.
  62. #
  63. #   "PLATFORM=INTEL"    (defaults depends on host)
  64. #           This option chooses the appropriate tools and sources for the
  65. #           different platforms supporting the Win32 API. Currently INTEL,
  66. #           MIPS, ALPHA, PPC are supported.
  67. #
  68. #   "INCREMENTAL=1"     (defaults to 0)
  69. #           This option enables incremental/minimal compilation and
  70. #           incremental linking.
  71. #
  72. # Advanced Options:
  73. #
  74. #   "MBCS=0"            (defaults to 1)
  75. #           To build an SBCS library instead of the default (MBCS)
  76. #           you can use MBCS=0.  This creates a slightly smaller
  77. #           library, but the code will not work in far-east markets.
  78. #           This option has no effect when UNICODE=1.
  79. #
  80. #   "MT=0"              (defaults to 1)
  81. #           To build a non-multithreaded library instead of the default
  82. #           (which enables multitheading and uses the multithread
  83. #           C-runtimes) you can use MT=0.
  84. #
  85. #############################################################################
  86. # Define defaults if not defined
  87.  
  88. # Default PLATFORM depending on host environment
  89. !ifndef PLATFORM
  90. !ifndef PROCESSOR_ARCHITECTURE
  91. PROCESSOR_ARCHITECTURE=x86
  92. !endif
  93. !if "$(PROCESSOR_ARCHITECTURE)" == "x86"
  94. PLATFORM=INTEL
  95. !endif
  96. !if "$(PROCESSOR_ARCHITECTURE)" == "MIPS"
  97. PLATFORM=MIPS
  98. !endif
  99. !if "$(PROCESSOR_ARCHITECTURE)" == "ALPHA"
  100. PLATFORM=ALPHA
  101. !endif
  102. !if "$(PROCESSOR_ARCHITECTURE)" == "PPC"
  103. PLATFORM=PPC
  104. !endif
  105. !endif
  106.  
  107. # Default to DEBUG mode
  108. !ifndef DEBUG
  109. DEBUG=1
  110. !endif
  111.  
  112. # Default to NOT DLL
  113. !ifndef DLL
  114. DLL=0
  115. !endif
  116.  
  117. # Default Codeview Info
  118. !ifndef CODEVIEW
  119. !if "$(DEBUG)" == "1"
  120. CODEVIEW=1
  121. !else
  122. CODEVIEW=0
  123. !endif
  124. !endif
  125.  
  126. # BROWSEONLY is default 0 and implies BROWSE=1 if BROWSEONLY=1
  127. !ifndef BROWSEONLY
  128. BROWSEONLY=0
  129. !endif
  130.  
  131. !if "$(BROWSEONLY)" != "0"
  132. !undef BROWSE
  133. BROWSE=1
  134. !endif
  135.  
  136. # Default to no BROWSE info
  137. !ifndef BROWSE
  138. BROWSE=0
  139. !endif
  140.  
  141. # Default to no INCREMENTAL build
  142. !ifndef DEVBUILD
  143. DEVBUILD=0
  144. !endif
  145. !if "$(DEBUG)" != "0"
  146. !ifndef INCREMENTAL
  147. INCREMENTAL=$(DEVBUILD)
  148. !endif
  149. !endif
  150. !ifndef INCREMENTAL
  151. INCREMENTAL=0
  152. !endif
  153.  
  154. # Default to _MBCS build
  155. !ifndef MBCS
  156. MBCS=1
  157. !endif
  158.  
  159. # Default to multithreading support
  160. !ifndef MT
  161. MT=1
  162. !endif
  163.  
  164. #############################################################################
  165. # normalize cases of parameters, or error check
  166.  
  167. !if "$(CPU)" == "MIPS"
  168. !if "$(PLATFORM)" != "MIPS"
  169. !error Must set PLATFORM=MIPS for MIPS builds
  170. !endif
  171. !endif
  172.  
  173. !if "$(CPU)" == "ALPHA"
  174. !if "$(PLATFORM)" != "ALPHA"
  175. !error Must set PLATFORM=ALPHA for ALPHA builds
  176. !endif
  177. !endif
  178.  
  179. BASE=W
  180.  
  181. #############################################################################
  182. # Parse options
  183.  
  184. #
  185. # DEBUG OPTIONS
  186. #
  187. !if "$(DEBUG)" != "0"
  188.  
  189. DEBUGSUF=D
  190. DEBDEFS=/D_DEBUG
  191. DEBOPTS=/Od
  192.  
  193. !endif
  194.  
  195. #
  196. # NON-DEBUG OPTIONS
  197. #
  198. !if "$(DEBUG)" == "0"
  199.  
  200. DEBUGSUF=
  201. DEBDEFS=
  202.  
  203. !if "$(PLATFORM)" == "INTEL"
  204. DEBOPTS=/O1 /GyF
  205. !endif
  206. !if "$(PLATFORM)" == "MIPS"
  207. DEBOPTS=/O1 /GyF
  208. !endif
  209. !if "$(PLATFORM)" == "ALPHA"
  210. DEBOPTS=/O1 /GyF
  211. !endif
  212. !if "$(PLATFORM)" == "PPC"
  213. DEBOPTS=/O1 /GyF
  214. !endif
  215.  
  216. !endif
  217.  
  218. #
  219. # PLATFORM options
  220. #
  221.  
  222. !if "$(PLATFORM)" == "INTEL"
  223. CL_MODEL=/D_X86_
  224. !endif
  225.  
  226. !if "$(PLATFORM)" == "MIPS"
  227. CL_MODEL=/D_MIPS_
  228. !endif
  229.  
  230. !if "$(PLATFORM)" == "ALPHA"
  231. CL_MODEL=/D_ALPHA_
  232. !endif
  233.  
  234. !if "$(PLATFORM)" == "PPC"
  235. CL_MODEL=/D_PPC_
  236. !endif
  237.  
  238. !if "$(CL_MODEL)" == ""
  239. !error PLATFORM must be one of INTEL, MIPS, ALPHA, or PPC.
  240. !endif
  241.  
  242. # TYPE = Library Type Designator
  243. #       c = normal C library
  244. #       d = DLL library
  245. TYPE=c
  246. DEXT=
  247.  
  248. #
  249. # Object File Directory
  250. #
  251. !if "$(OBJ)" == ""
  252. D=$$$(MODEL)$(BASE)$(DEBUGSUF)$(DEXT)    # subdirectory specific to variant
  253. !else
  254. D=$(OBJ)                                 # User specified directory
  255. !endif
  256.  
  257. #
  258. # _AFXDLL DLL Variant
  259. #
  260.  
  261. !if "$(DLL)" == "2"
  262. # _AFXDLL library
  263. TYPE=e
  264. !if "$(OBJ)" == ""
  265. D=DLL$(DEBUGSUF).$(BASE)
  266. !if "$(UNICODE)" == "1"
  267. D=$(MODEL)$D
  268. !endif
  269. D=$$$D
  270. !endif
  271. TARGOPTS=$(TARGOPTS) /MD /D_DLL /GF
  272. !if "$(MT)" != "0"
  273. TARGOPTS=$(TARGOPTS) /D_MT
  274. !endif
  275. TARGDEFS=$(TARGDEFS) /D_WINDLL /D_AFXDLL
  276. !else
  277. # not _AFXDLL library
  278. !if "$(MD)" == "1"
  279. TARGOPTS=$(TARGOPTS) /MD
  280. !else
  281. !if "$(MT)" != "0"
  282. TARGOPTS=$(TARGOPTS) /MT
  283. !endif
  284. !endif
  285. !endif
  286.  
  287. !if "$(UNICODE)" == "1"
  288. MODEL=U
  289. TARGDEFS=$(TARGDEFS) /D_UNICODE
  290. !else
  291. MODEL=N
  292. !if "$(MBCS)" != "0"
  293. TARGDEFS=$(TARGDEFS) /D_MBCS
  294. !endif
  295. !endif
  296.  
  297. !if "$(DLL)" == "2" && "$(BROWSEONLY)" != "1"
  298. !if "$(TARG)" == ""
  299. !error DLL=2 is used only from MFCDLL.MAK, MFCOLE.MAK, or MFCDB.MAK
  300. !endif
  301. GOAL=$(TARG)
  302. !else
  303. GOAL=$(MODEL)afx$(TYPE)$(BASE)$(DEBUGSUF)
  304. !endif
  305.  
  306. #
  307. # CODEVIEW options
  308. #
  309. !if "$(CODEVIEW)" == "1"
  310. !if "$(NO_PDB)" == "1"
  311. CVOPTS=/Z7
  312. !if "$(PROFLIB)" != ""
  313. !error Can't build for profiling without PDB files.
  314. !endif
  315. !else
  316. CVOPTS=/Zi
  317. !if "$(PROFLIB)" != ""
  318. CVOPTS=$(CVOPTS) /Gh
  319. !endif
  320. !if "$(DLL)" == "2"
  321. PDBOPTS=/Fd$(GOAL).pdb
  322. !else
  323. PDBOPTS=/Fd..\lib\$(GOAL).pdb
  324. !endif
  325. !endif
  326. !endif
  327.  
  328. #
  329. # INCREMENTAL options
  330. #
  331. !if "$(INCREMENTAL)" == "1"
  332. INCROPTS=/Gi /Gm
  333. !else
  334. INCROPTS=/Gi- /Gm-
  335. !endif
  336.  
  337. #
  338. # COMPILER OPTIONS
  339. #
  340. !if "$(PLATFORM)" == "INTEL"
  341. CL_OPT=/W4 /WX /Zl /GX /GR $(INCROPTS) $(DEBOPTS) $(CVOPTS) $(TARGOPTS)
  342. !endif
  343.  
  344. !if "$(PLATFORM)" == "MIPS"
  345. CL_OPT=/W4 /WX /Zl /GX /GR $(INCROPTS) $(DEBOPTS) $(CVOPTS) $(TARGOPTS)
  346. !endif
  347.  
  348. !if "$(PLATFORM)" == "ALPHA"
  349. CL_OPT=/W4 /WX /Zl /GX /GR $(INCROPTS) $(DEBOPTS) $(CVOPTS) $(TARGOPTS)
  350. !endif
  351.  
  352. !if "$(PLATFORM)" == "PPC"
  353. CL_OPT=/W4 /WX /Zl /GX /GR $(INCROPTS) $(DEBOPTS) $(CVOPTS) $(TARGOPTS)
  354. !endif
  355.  
  356. !if "$(DEVBUILD)" != "0"
  357. CL_OPT=$(CL_OPT) /D_AFX_DEVBUILD
  358. !endif
  359.  
  360. !if "$(BROWSE)" != "0"
  361. CL_OPT=/FR$D\ $(CL_OPT)
  362. !endif
  363.  
  364. !if "$(BROWSEONLY)" != "0"
  365. CL_OPT=/Zs $(CL_OPT)
  366. !else
  367. CL_OPT=/Fo$D\ $(CL_OPT)
  368. !endif
  369.  
  370. DEFS=$(DEFS) $(DEBDEFS) $(TARGDEFS)
  371.  
  372. #############################################################################
  373. # Library Components
  374.  
  375. OBJECT=$D\objcore.obj $D\except.obj \
  376.     $D\validadd.obj $D\dumpcont.obj $D\dumpflt.obj \
  377.     $D\arccore.obj $D\arcobj.obj $D\arcex.obj \
  378.         $D\arcstrm.obj
  379.  
  380. # non-shared diagnostics
  381. OBJDIAG=$D\dumpinit.obj $D\dumpout.obj \
  382.     $D\afxasert.obj $D\afxmem.obj $D\afxabort.obj
  383.  
  384. FILES=$D\filecore.obj $D\filetxt.obj $D\filemem.obj $D\fileshrd.obj \
  385.     $D\filex.obj $D\filest.obj
  386.  
  387. COLL1=$D\array_b.obj $D\array_d.obj $D\array_p.obj $D\array_o.obj \
  388.     $D\array_s.obj $D\array_u.obj $D\array_w.obj \
  389.     $D\list_o.obj $D\list_p.obj $D\list_s.obj
  390.  
  391. COLL2=$D\map_pp.obj $D\map_pw.obj $D\map_so.obj \
  392.     $D\map_sp.obj $D\map_ss.obj $D\map_wo.obj $D\map_wp.obj $D\plex.obj
  393.  
  394. MISC=\
  395.     $D\strcore.obj $D\strex.obj $D\timecore.obj \
  396.     $D\afxdbcs.obj $D\afxstate.obj $D\afxtls.obj $D\fixalloc.obj \
  397.     $D\mtcore.obj $D\mtex.obj
  398.  
  399. WINDOWS=\
  400.     $D\wincore.obj $D\winfrm.obj $D\winfrm2.obj $D\winfrmx.obj \
  401.     $D\winmdi.obj $D\tooltip.obj $D\winmini.obj $D\winhand.obj \
  402.     $D\winmain.obj $D\barcore.obj $D\bartool.obj $D\bardlg.obj \
  403.     $D\barstat.obj $D\bardock.obj $D\dockcont.obj $D\dockstat.obj \
  404.         $D\dcprev.obj $D\dcmeta.obj $D\trckrect.obj $D\barcool.obj
  405.  
  406. DIALOG=\
  407.     $D\winctrl1.obj $D\winctrl2.obj $D\winctrl3.obj $D\winctrl4.obj \
  408.     $D\winbtn.obj $D\dlgcore.obj $D\dlgdata.obj $D\dlgfloat.obj \
  409.     $D\dlgprop.obj $D\dlgcomm.obj $D\dlgfile.obj $D\dlgprnt.obj \
  410.     $D\dlgclr.obj $D\dlgfnt.obj $D\dlgfr.obj $D\ccdata.obj \
  411.     $D\dlgtempl.obj $D\winctrl6.obj $D\winctrl7.obj
  412.  
  413. WINMISC=\
  414.     $D\wingdi.obj $D\wingdix.obj $D\winstr.obj $D\winmenu.obj \
  415.     $D\auxdata.obj $D\afxcrit.obj $D\afxtrace.obj $D\winutil.obj \
  416.     $D\winocc.obj
  417.  
  418. DOCVIEW=\
  419.     $D\cmdtarg.obj $D\doccore.obj $D\doctempl.obj \
  420.     $D\docsingl.obj $D\docmulti.obj $D\docmgr.obj \
  421.     $D\viewcore.obj $D\viewprnt.obj $D\winsplit.obj $D\viewscrl.obj \
  422.     $D\viewform.obj $D\viewedit.obj $D\viewprev.obj $D\viewcmn.obj \
  423.     $D\docmapi.obj
  424.  
  425. INTERNET=$D\inet.obj $D\filefind.obj
  426. !if "$(UNICODE)" != "1"
  427. INTERNET=$(INTERNET) $D\isapimix.obj
  428. !endif
  429.  
  430. APPLICATION=\
  431.     $D\thrdcore.obj $D\appcore.obj $D\appinit.obj $D\appterm.obj \
  432.     $D\appui.obj $D\appui1.obj $D\appui2.obj $D\appui3.obj $D\appgray.obj \
  433.     $D\appdlg.obj $D\app3d.obj $D\appprnt.obj $D\apphelp.obj $D\apphelpx.obj \
  434.     $D\filelist.obj
  435.  
  436. !if "$(DLL)" != "2"
  437. APPLICATION=$(APPLICATION) $D\app3ds.obj \
  438.     $D\nolib.obj $D\appmodul.obj $D\dllmodul.obj $D\oleexp.obj $D\dumpstak.obj
  439. !endif
  440.  
  441. DB=\
  442.     $D\dbcore.obj $D\dbrfx.obj $D\dbview.obj $D\dbflt.obj \
  443.     $D\dblong.obj $D\dbvar.obj \
  444.     $(DB) $D\daocore.obj $D\daodfx.obj $D\daoview.obj $D\viewoled.obj
  445.  
  446. SOCKETS=$D\sockcore.obj
  447.  
  448. OLEREQ=$D\olelock.obj
  449.  
  450. OLE=\
  451.     $D\oleinit.obj $D\olecli1.obj $D\olecli2.obj \
  452.     $D\olecli3.obj $D\olecnvrt.obj $D\oledobj1.obj $D\oledobj2.obj \
  453.     $D\oledisp1.obj $D\oledisp2.obj $D\oledlgs1.obj $D\oledlgs2.obj \
  454.     $D\oledlgs3.obj $D\oledata.obj $D\olevar.obj $D\olevar1.obj \
  455.     $D\oledoc1.obj $D\oledoc2.obj $D\oledrop1.obj $D\oledrop2.obj \
  456.     $D\olemsgf.obj $D\oleenum.obj $D\olefact.obj $D\oleipfrm.obj \
  457.     $D\olelink.obj $D\olemisc.obj $D\olestrm.obj $D\olesvr1.obj \
  458.     $D\olesvr2.obj $D\olereg.obj $D\oletsvr.obj $D\oleui1.obj \
  459.     $D\oleui2.obj $D\oleunk.obj $D\oleverb.obj $D\olecall.obj \
  460.     $D\viewrich.obj $D\oledll.obj $D\oletyplb.obj \
  461.     $D\olemon.obj $D\winctrl5.obj $D\viewhtml.obj \
  462.     $D\occmgr.obj $D\occevent.obj $D\occcont.obj $D\occsite.obj \
  463.     $D\occlock.obj $D\occddx.obj $D\occddxf.obj $D\occdlg.obj \
  464.     $D\oledocvw.obj $D\oledocob.obj $D\oledoctg.obj $D\oledocip.obj \
  465.     $D\oledoccl.obj $D\oleasmon.obj $D\olebar.obj
  466.  
  467. OLECTL=\
  468.     $D\ctlcache.obj $D\ctlcore.obj $D\ctlconn.obj \
  469.     $D\ctldata.obj $D\ctlevent.obj $D\ctlmodul.obj \
  470.     $D\ctlframe.obj $D\ctlfont.obj $D\ctlinplc.obj \
  471.     $D\ctllic.obj $D\oleconn.obj $D\ctlobj.obj $D\ctlpict.obj \
  472.     $D\ctlpropx.obj $D\ctlppg.obj $D\ctlprop.obj \
  473.     $D\ctlpset.obj $D\ctlpstg.obj $D\ctlpstm.obj \
  474.     $D\ctlrefl.obj $D\ctlreg.obj $D\ctltrack.obj \
  475.     $D\ctlview.obj $D\olepset.obj $D\ctlpbag.obj \
  476.     $D\ctlquick.obj $D\ctlnownd.obj \
  477.     $D\ppgcolor.obj $D\ppgfont.obj $D\ppgpict.obj $D\ppgstock.obj
  478.  
  479. !if "$(DEBUG)" == "1"
  480. OLECTL=$(OLECTL) $D\ctlinl.obj
  481. !endif
  482.  
  483. !if "$(PLATFORM)" == "ALPHA"
  484. !if "$(DEBUG)" == "1"
  485. OLEASM=.\alpha\olecalld.obj
  486. !else
  487. OLEASM=.\alpha\olecalln.obj
  488. !endif
  489. !endif
  490.  
  491. !if "$(PLATFORM)" == "PPC"
  492. !if "$(DEBUG)" == "1"
  493. OLEASM=.\ppc\olecalld.obj
  494. !else
  495. OLEASM=.\ppc\olecalln.obj
  496. !endif
  497. !endif
  498.  
  499. OLEDLL=$(OLE) $(OLECTL) $(OLEASM)
  500.  
  501. !if "$(DEBUG)" == "1"
  502. INLINES = $D\afxinl1.obj $D\afxinl2.obj $D\afxinl3.obj
  503. !else
  504. INLINES =
  505. !endif
  506.  
  507. CPP_OBJS=$(OBJECT) $(OBJDIAG) $(INLINES) $(FILES) $(COLL1) $(COLL2) $(MISC) \
  508.     $(WINDOWS) $(DIALOG) $(WINMISC) $(DOCVIEW) $(APPLICATION) \
  509.     $(SOCKETS) $(OLEREQ) $(OLE) $(DAO) $(DB) $(INTERNET) $(OLECTL)
  510.  
  511. !if "$(BROWSEONLY)" == "1" && "$(DLL)" == "2"
  512. TARGDEFS=$(TARGDEFS) /D_AFX_CORE_IMPL /D_AFX_OLE_IMPL /D_AFX_DB_IMPL /D_AFX_NET_IMPL
  513. !endif
  514.  
  515. OBJS=$(CPP_OBJS) $(OLEASM)
  516.  
  517.  
  518. #############################################################################
  519. # Standard tools
  520.  
  521. #############################################################################
  522. # Set CPPFLAGS for use with .cpp.obj and .c.obj rules
  523. # Define rule for use with OBJ directory
  524. # C++ uses a PCH file
  525.  
  526. CPPFLAGS=$(CPPFLAGS) $(CL_MODEL) $(CL_OPT) $(PDBOPTS) $(DEFS) $(OPT)
  527.  
  528. !ifndef NO_PCH
  529. !ifndef PCH_FILE
  530. PCH_FILE=$D\stdafx
  531. !if "$(BROWSE)" != "0"
  532. PCH_FILE=$(PCH_FILE)b
  533. !endif
  534. PCH_FILE=$(PCH_FILE).pch
  535. !endif
  536. !ifndef PCH_CPP
  537. PCH_CPP=objcore
  538. !endif
  539.  
  540. CPPFLAGS=$(CPPFLAGS) /Yustdafx.h /Fp$(PCH_FILE)
  541. !else
  542. PCH_FILE=
  543. !endif
  544.  
  545. .SUFFIXES:: .cpp
  546.  
  547. !if "$(BROWSE)" != "0"
  548. .cpp{$D}.obj:
  549.     cl @<<
  550. $(CPPFLAGS) /c $<
  551. <<
  552.     copy /b $*.sbr+pchmark.bin $*.sbr >NUL
  553. !else
  554. .cpp{$D}.obj::
  555.     cl @<<
  556. $(CPPFLAGS) /c $<
  557. <<
  558. !endif
  559.  
  560. .cpp{$D}.sbr:
  561.     cl @<<
  562. $(CPPFLAGS) /c $<
  563. <<
  564.     copy /b $*.sbr+pchmark.bin $*.sbr >NUL
  565.  
  566. #############################################################################
  567. # Goals to build
  568.  
  569. GOALS=create.dir
  570. !if "$(BROWSEONLY)" == "0"
  571. GOALS=$(GOALS) ..\lib\$(GOAL).lib
  572. !endif
  573. !if "$(BROWSE)" != "0"
  574. GOALS=$(GOALS) $(GOAL).bsc
  575. !endif
  576.  
  577. goal: $(GOALS)
  578.  
  579. create.dir:
  580.     @-if not exist $D\*.* mkdir $D
  581.  
  582. clean:
  583.     -if exist $D\*.obj erase $D\*.obj
  584.     -if exist $D\*.pch erase $D\*.pch
  585.     -if exist $D\*.res erase $D\*.res
  586.     -if exist $D\*.rsc erase $D\*.rsc
  587.     -if exist $D\*.map erase $D\*.map
  588.     -if not exist $D\*.* rmdir $D
  589.     -if exist ..\lib\$(GOAL).pdb del ..\lib\$(GOAL).pdb
  590.     -if exist ..\lib\$(GOAL).idb del ..\lib\$(GOAL).idb
  591.     -if exist ..\lib\$(GOAL).rep del ..\lib\$(GOAL).rep
  592.     -if exist $(GOAL).pdb del $(GOAL).pdb
  593.     -if exist $(GOAL).idb del $(GOAL).idb
  594.     -if exist $(GOAL).rep del $(GOAL).rep
  595.  
  596. #############################################################################
  597. # Precompiled header file
  598.  
  599. !ifndef NO_PCH
  600.  
  601. !if "$(DEBUG)" == "1"
  602. HDRS =..\include\*.h
  603. !else
  604. HDRS =..\include\*.h ..\include\*.inl
  605. !endif
  606.  
  607. PCH_TARGETS=$(PCH_FILE) $D\$(PCH_CPP).obj
  608. !if "$(BROWSEONLY)" != "0"
  609. PCH_TARGETS=$(PCH_TARGETS) $D\$(PCH_CPP).sbr
  610. !endif
  611.  
  612. $(PCH_TARGETS):: $(PCH_CPP).cpp $(HDRS)
  613.     cl @<<
  614. /Ycstdafx.h /Fp$(PCH_FILE) $(CL_MODEL) $(CL_OPT) $(PDBOPTS) $(DEFS) $(OPT) /c $(PCH_CPP).cpp
  615. <<
  616. !if "$(BROWSE)" != "0"
  617.     copy /b $D\$(PCH_CPP).sbr+pchmark.bin $D\$(PCH_CPP).sbr>NUL
  618. !endif
  619.  
  620. !if "$(BROWSEONLY)" == "1"
  621. $D\$(PCH_CPP).sbr:: $(PCH_CPP).cpp $(PCH_FILE)
  622. !endif
  623.  
  624. !endif # NO_PCH
  625.  
  626. #############################################################################
  627. ## PLATFORM=ALPHA specific target(s)
  628.  
  629. !if "$(PLATFORM)" == "ALPHA"
  630.  
  631. !if "$(DEBUG)" == "1"
  632. ASMOPT=$(ASMOPT) /D_DEBUG /g2
  633. !else
  634. ASMOPT=$(ASMOPT)
  635. !endif
  636.  
  637. $(OLEASM) : alpha\olecall_.s
  638.     asaxp $(ASMOPT) -o $@ alpha\olecall_.s
  639.  
  640. !endif
  641.  
  642. #############################################################################
  643. ## PLATFORM=PPC specific target(s)
  644.  
  645. !if "$(PLATFORM)" == "PPC"
  646.  
  647. !if "$(DEBUG)" == "1"
  648. ASMOPT=$(ASMOPT)
  649. !else
  650. ASMOPT=$(ASMOPT)
  651. !endif
  652.  
  653. $(OLEASM) : ppc\olecall_.s
  654.     pas $(ASMOPT) -o $@ ppc\olecall_.s
  655.  
  656. !endif
  657.  
  658. #############################################################################
  659. # Build the library from the up-to-date objs
  660.  
  661. SBRS=$(CPP_OBJS:.obj=.sbr)
  662.  
  663. !if "$(BROWSEONLY)" != "0"
  664.  
  665. # Build final browse database
  666. $(GOAL).bsc: $(PCH_TARGETS) $(SBRS)
  667.     bscmake /n /Iu /El /o$@ @<<
  668. $(SBRS)
  669. <<
  670.  
  671. !else #BROWSEONLY
  672.  
  673. !if "$(DLL)" != "2"
  674. # Build final library
  675. ..\lib\$(GOAL).lib: $(PCH_TARGETS) $(OBJS)
  676.     @-if exist $@ erase $@
  677.     @lib /out:$@ @<<
  678. $(OBJS)
  679. <<
  680.  
  681. # Recurse to build browse database
  682. $(GOAL).bsc: $(PCH_TARGETS) $(SBRS)
  683.     $(MAKE) /f makefile. @<<
  684. BROWSEONLY=1 PLATFORM=$(PLATFORM) DEBUG=$(DEBUG) CODEVIEW=$(CODEVIEW) \
  685. DLL=$(DLL) NO_PCH=$(NO_PCH) OBJ=$(OBJ) OPT=$(OPT)
  686. <<
  687. !endif #DLL!=2
  688.  
  689. !endif #!BROWSEONLY
  690.  
  691. #############################################################################
  692.