• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1
2# Copyright (C) 2009-2013 by Daniel Stenberg
3#
4# Permission to use, copy, modify, and distribute this
5# software and its documentation for any purpose and without
6# fee is hereby granted, provided that the above copyright
7# notice appear in all copies and that both that copyright
8# notice and this permission notice appear in supporting
9# documentation, and that the name of M.I.T. not be used in
10# advertising or publicity pertaining to distribution of the
11# software without specific, written prior permission.
12# M.I.T. makes no representations about the suitability of
13# this software for any purpose.  It is provided "as is"
14# without express or implied warranty.
15
16# ------------------------------------------------------------------------------
17#
18# Makefile for building c-ares libraries and sample programs with MSVC.
19#
20# Usage: nmake /f makefile.msvc CFG=<config> <target>
21#
22# <config> must be one of: [ lib-release | lib-debug | dll-release | dll-debug }
23# <target> must be one of: [ ALL | c-ares | acountry | adig | ahost | clean }
24#
25# If a <target> other than ALL or clean is given, <config> becomes mandatory.
26#
27# If neither <config> nor <target> are specified this results in
28# all targets being built for all <config> c-ares library types.
29#
30# This makefile must be processed from the subdir where it is located.
31#
32# All results are generated below a subdirectory named msvcXXX.
33#
34# ------------------------------------------------------------------------------
35
36NAME = cares
37
38# ------------------------------------------------
39# c-ares static and dynamic libraries common base
40# file names for release and debug configurations
41# ------------------------------------------------
42
43STA_LIB_REL = lib$(NAME)
44DYN_LIB_REL = $(NAME)
45STA_LIB_DBG = $(STA_LIB_REL)d
46DYN_LIB_DBG = $(DYN_LIB_REL)d
47
48# -------------------------------------------
49# Base names for c-ares DLL import libraries
50# -------------------------------------------
51
52IMP_LIB_REL = $(DYN_LIB_REL)
53IMP_LIB_DBG = $(DYN_LIB_DBG)
54
55# --------------------------
56# Runtime library selection
57# --------------------------
58
59RTLIB  = /MD
60RTLIBD = /MDd
61
62!IF "$(RTLIBCFG)" == "static"
63RTLIB  = /MT
64RTLIBD = /MTd
65!ENDIF
66
67# --------------------------------------------------------
68# Define USE_WATT32 to 1 to use the Watt-32 tcp/ip stack,
69# otherwise Winsock tcp/ip stack will be used as default.
70# --------------------------------------------------------
71
72USE_WATT32 = 0
73
74# --------------------------------------------------------
75# Detect compiler version.
76# --------------------------------------------------------
77!INCLUDE .\msvc_ver.inc
78
79# ----------------------------------------------------
80# Verify that current subdir is the c-ares source one
81# ----------------------------------------------------
82
83!IF ! EXIST(.\src\lib\ares_init.c)
84!  MESSAGE Can not process Makefile.msvc from outside of c-ares source subdirectory.
85!  MESSAGE Change to the subdirectory where Makefile.msvc is found, and try again.
86!  ERROR   See previous message.
87!ENDIF
88
89# ------------------------------------------------------------------
90# Base subdir is the common root from which other subdirs will hang.
91# ------------------------------------------------------------------
92
93BASE_DIR = .\msvc
94
95# ----------------------------------------
96# Subdir holding sources for all projects
97# ----------------------------------------
98
99SRCDIR = .
100
101# -----------------------------
102# Default installation subdirs
103# -----------------------------
104
105!IFNDEF INSTALL_DIR
106INSTALL_DIR = .
107!ENDIF
108
109!IFNDEF INSTALL_DIR_LIB
110INSTALL_DIR_LIB = $(INSTALL_DIR)\lib
111!ENDIF
112
113!IFNDEF INSTALL_DIR_INC
114INSTALL_DIR_INC = $(INSTALL_DIR)\include
115!ENDIF
116
117# -------------------------
118# Configuration validation
119# -------------------------
120
121VALID_CFGSET = FALSE
122!IF "$(CFG)" == "lib-release" || "$(CFG)" == "lib-debug" || \
123    "$(CFG)" == "dll-release" || "$(CFG)" == "dll-debug"
124VALID_CFGSET = TRUE
125!ENDIF
126
127!IF "$(VALID_CFGSET)" == "FALSE" && "$(CFG)" != ""
128!  MESSAGE MSVC c-ares makefile
129!  MESSAGE
130!  MESSAGE Usage: nmake /f makefile.msvc CFG=<config> <target>
131!  MESSAGE
132!  MESSAGE <config> must be one of: [ lib-release | lib-debug | dll-release | dll-debug }
133!  MESSAGE <target> must be one of: [ ALL | c-ares | acountry | adig | ahost | clean }
134!  MESSAGE
135!  MESSAGE If a <target> other than ALL or clean is given, <config> becomes mandatory.
136!  MESSAGE
137!  MESSAGE If neither <config> nor <target> are specified this results in
138!  MESSAGE all targets being built for all <config> c-ares library types.
139!  MESSAGE
140!  ERROR Choose a valid configuration.
141!ENDIF
142
143# --------------------------------------------------------
144# Project subdirs independent of configuration being used
145# --------------------------------------------------------
146
147CARES_DIR = $(BASE_DIR)\cares
148PROG1_DIR = $(BASE_DIR)\acountry
149PROG2_DIR = $(BASE_DIR)\adig
150PROG3_DIR = $(BASE_DIR)\ahost
151
152# ---------------------------------------------------
153# Subdirs which are configuration dependent are only
154# defined when a valid configuration has been given.
155# ---------------------------------------------------
156
157!IF "$(VALID_CFGSET)" == "TRUE"
158CARES_OUTDIR = $(CARES_DIR)\$(CFG)
159PROG1_OUTDIR = $(PROG1_DIR)\$(CFG)
160PROG2_OUTDIR = $(PROG2_DIR)\$(CFG)
161PROG3_OUTDIR = $(PROG3_DIR)\$(CFG)
162CARES_OBJDIR = $(CARES_OUTDIR)\obj
163PROG1_OBJDIR = $(PROG1_OUTDIR)\obj
164PROG2_OBJDIR = $(PROG2_OUTDIR)\obj
165PROG3_OBJDIR = $(PROG3_OUTDIR)\obj
166!ELSE
167!UNDEF CARES_OUTDIR
168!UNDEF PROG1_OUTDIR
169!UNDEF PROG2_OUTDIR
170!UNDEF PROG3_OUTDIR
171!UNDEF CARES_OBJDIR
172!UNDEF PROG1_OBJDIR
173!UNDEF PROG2_OBJDIR
174!UNDEF PROG3_OBJDIR
175!ENDIF
176
177# -------------------------------------
178# Settings that depend on tcp/ip stack
179# -------------------------------------
180
181!IF "$(USE_WATT32)" == "1"
182CFLAGS  = /UWIN32 /DWATT32 /I$(WATT_ROOT)\inc
183EX_LIBS_REL = $(WATT_ROOT)\lib\wattcpvc_imp.lib
184EX_LIBS_DBG = $(WATT_ROOT)\lib\wattcpvc_imp_d.lib
185!ELSE
186CFLAGS  = /DWIN32 /D_WIN32_WINNT=0x0600
187EX_LIBS_REL = ws2_32.lib advapi32.lib kernel32.lib iphlpapi.lib
188EX_LIBS_DBG = ws2_32.lib advapi32.lib kernel32.lib iphlpapi.lib
189!ENDIF
190
191# -------------------------------------------------
192# Switches that depend on ancient compiler versions
193# -------------------------------------------------
194
195!IF $(CC_VERS_NUM) == 60
196PDB_NONE            = /pdb:none
197PDBTYPE_CONSOLIDATE = /pdbtype:consolidate
198!ELSE
199!UNDEF PDB_NONE
200!UNDEF PDBTYPE_CONSOLIDATE
201!ENDIF
202
203!IF $(CC_VERS_NUM) <= 70
204RT_ERROR_CHECKING = /GZ
205!ELSE
206RT_ERROR_CHECKING = /RTCsu
207!ENDIF
208
209# ----------------------------
210# Assorted commands and flags
211# ----------------------------
212
213CC_CMD_REL = cl.exe /nologo $(RTLIB) /DNDEBUG /O2
214CC_CMD_DBG = cl.exe /nologo $(RTLIBD) /D_DEBUG /Od /Zi $(RT_ERROR_CHECKING)
215CC_CFLAGS  = $(CFLAGS) /I.\src\lib /I.\include /W3 /EHsc /FD
216
217RC_CMD_REL = rc.exe /l 0x409 /d "NDEBUG"
218RC_CMD_DBG = rc.exe /l 0x409 /d "_DEBUG"
219
220LINK_CMD_LIB = link.exe /lib /nologo
221LINK_CMD_DLL = link.exe /dll /nologo /incremental:no /fixed:no
222LINK_CMD_EXE = link.exe /nologo /incremental:no /fixed:no /subsystem:console
223
224LINK_CMD_EXE_REL = $(LINK_CMD_EXE) /release $(PDB_NONE)
225LINK_CMD_EXE_DBG = $(LINK_CMD_EXE) /debug $(PDBTYPE_CONSOLIDATE)
226
227# ---------------------------------
228# Configuration dependent settings
229# ---------------------------------
230
231!IF "$(CFG)" == "lib-release"
232CARES_TARGET = $(STA_LIB_REL).lib
233CARES_CFLAGS = /DCARES_BUILDING_LIBRARY /DCARES_STATICLIB
234CARES_LFLAGS =
235SPROG_CFLAGS = /DCARES_STATICLIB
236SPROG_LFLAGS = /libpath:$(CARES_OUTDIR) $(EX_LIBS_REL) $(STA_LIB_REL).lib
237CARES_LINK   = $(LINK_CMD_LIB)
238SPROG_LINK   = $(LINK_CMD_EXE_REL)
239CC_CMD       = $(CC_CMD_REL)
240!ENDIF
241
242!IF "$(CFG)" == "lib-debug"
243CARES_TARGET = $(STA_LIB_DBG).lib
244CARES_CFLAGS = /DCARES_BUILDING_LIBRARY /DCARES_STATICLIB /DDEBUGBUILD
245CARES_LFLAGS =
246SPROG_CFLAGS = /DCARES_STATICLIB
247SPROG_LFLAGS = /libpath:$(CARES_OUTDIR) $(EX_LIBS_DBG) $(STA_LIB_DBG).lib
248CARES_LINK   = $(LINK_CMD_LIB)
249SPROG_LINK   = $(LINK_CMD_EXE_DBG)
250CC_CMD       = $(CC_CMD_DBG)
251!ENDIF
252
253!IF "$(CFG)" == "dll-release"
254CARES_TARGET = $(DYN_LIB_REL).dll
255CARES_CFLAGS = /DCARES_BUILDING_LIBRARY
256CARES_LFLAGS = /release $(EX_LIBS_REL) /implib:$(CARES_OUTDIR)\$(IMP_LIB_REL).lib $(PDB_NONE)
257SPROG_CFLAGS =
258SPROG_LFLAGS = /libpath:$(CARES_OUTDIR) $(EX_LIBS_REL) $(IMP_LIB_REL).lib
259CARES_LINK   = $(LINK_CMD_DLL)
260SPROG_LINK   = $(LINK_CMD_EXE_REL)
261CC_CMD       = $(CC_CMD_REL)
262USE_RES_FILE = TRUE
263RC_CMD       = $(RC_CMD_REL)
264!ENDIF
265
266!IF "$(CFG)" == "dll-debug"
267CARES_TARGET = $(DYN_LIB_DBG).dll
268CARES_CFLAGS = /DCARES_BUILDING_LIBRARY /DDEBUGBUILD
269CARES_LFLAGS = /debug $(EX_LIBS_DBG) /implib:$(CARES_OUTDIR)\$(IMP_LIB_DBG).lib /pdb:$(CARES_OUTDIR)\$(DYN_LIB_DBG).pdb $(PDBTYPE_CONSOLIDATE)
270SPROG_CFLAGS =
271SPROG_LFLAGS = /libpath:$(CARES_OUTDIR) $(EX_LIBS_DBG) $(IMP_LIB_DBG).lib
272CARES_LINK   = $(LINK_CMD_DLL)
273SPROG_LINK   = $(LINK_CMD_EXE_DBG)
274CC_CMD       = $(CC_CMD_DBG)
275USE_RES_FILE = TRUE
276RC_CMD       = $(RC_CMD_DBG)
277!ENDIF
278
279# --------------------------------------------
280# Makefile.inc provides lists of source files
281# --------------------------------------------
282
283!INCLUDE .\src\lib\Makefile.inc
284!INCLUDE .\src\tools\Makefile.inc
285
286# ----------------------------
287# Build lists of object files
288# ----------------------------
289
290!IF "$(VALID_CFGSET)" == "TRUE"
291
292!IF [ECHO CARES_OBJS=^$(CARES_OBJDIR)\$(CSOURCES: = $(CARES_OBJDIR^)\) > .\cares_objs.inc] == 0
293!INCLUDE .\cares_objs.inc
294!IF [DEL .\cares_objs.inc]
295!ENDIF
296!ELSE
297!ERROR Problem generating CARES_OBJS list.
298!ENDIF
299CARES_OBJS = $(CARES_OBJS:.c=.obj)
300!IF "$(USE_RES_FILE)" == "TRUE"
301CARES_OBJS = $(CARES_OBJS) $(CARES_OBJDIR)\cares.res
302!ENDIF
303
304!IF [ECHO PROG1_OBJS=^$(PROG1_OBJDIR)\$(SAMPLESOURCES: = $(PROG1_OBJDIR^)\) > .\prog1_objs.inc] == 0
305!INCLUDE .\prog1_objs.inc
306!IF [DEL .\prog1_objs.inc]
307!ENDIF
308!ELSE
309!ERROR Problem generating PROG1_OBJS list.
310!ENDIF
311PROG1_OBJS = $(PROG1_OBJS:.c=.obj)
312PROG1_OBJS = $(PROG1_OBJS:/=\)
313PROG1_OBJS = $(PROG1_OBJS) $(PROG1_OBJDIR)\acountry.obj
314
315!IF [ECHO PROG2_OBJS=^$(PROG2_OBJDIR)\$(SAMPLESOURCES: = $(PROG2_OBJDIR^)\) > .\prog2_objs.inc] == 0
316!INCLUDE .\prog2_objs.inc
317!IF [DEL .\prog2_objs.inc]
318!ENDIF
319!ELSE
320!ERROR Problem generating PROG2_OBJS list.
321!ENDIF
322PROG2_OBJS = $(PROG2_OBJS:.c=.obj)
323PROG2_OBJS = $(PROG2_OBJS:/=\)
324PROG2_OBJS = $(PROG2_OBJS) $(PROG2_OBJDIR)\adig.obj
325
326!IF [ECHO PROG3_OBJS=^$(PROG3_OBJDIR)\$(SAMPLESOURCES: = $(PROG3_OBJDIR^)\) > .\prog3_objs.inc] == 0
327!INCLUDE .\prog3_objs.inc
328!IF [DEL .\prog3_objs.inc]
329!ENDIF
330!ELSE
331!ERROR Problem generating PROG3_OBJS list.
332!ENDIF
333PROG3_OBJS = $(PROG3_OBJS:.c=.obj)
334PROG3_OBJS = $(PROG3_OBJS:/=\)
335PROG3_OBJS = $(PROG3_OBJS) $(PROG3_OBJDIR)\ahost.obj
336
337!ENDIF
338
339
340# --------------------------------
341# Only our custom inference rules
342# --------------------------------
343
344.SUFFIXES:
345.SUFFIXES: .c .rc
346
347{$(SRCDIR)\src\lib}.rc{$(CARES_OBJDIR)}.res:
348    $(RC_CMD) /Fo $@ $<
349
350{$(SRCDIR)\src\lib}.c{$(CARES_OBJDIR)}.obj:
351    $(CC_CMD) $(CC_CFLAGS) $(CARES_CFLAGS) /Fo$@ /Fd$(@D)\ /c $<
352
353{$(SRCDIR)\src\tools}.c{$(PROG1_OBJDIR)}.obj:
354    $(CC_CMD) $(CC_CFLAGS) $(SPROG_CFLAGS) /Fo$@ /Fd$(@D)\ /c $<
355
356{$(SRCDIR)\src\tools}.c{$(PROG2_OBJDIR)}.obj:
357    $(CC_CMD) $(CC_CFLAGS) $(SPROG_CFLAGS) /Fo$@ /Fd$(@D)\ /c $<
358
359{$(SRCDIR)\src\tools}.c{$(PROG3_OBJDIR)}.obj:
360    $(CC_CMD) $(CC_CFLAGS) $(SPROG_CFLAGS) /Fo$@ /Fd$(@D)\ /c $<
361
362# Hack Alert! we reference ../lib/ files in the Makefile.inc for tools as they
363# share some files with the library itself.  We need to hack around that here.
364
365{$(SRCDIR)\src\lib}.c{$(PROG1_OBJDIR)\..\lib}.obj:
366    $(CC_CMD) $(CC_CFLAGS) $(SPROG_CFLAGS) /Fo$(PROG1_OBJDIR)\$(@F) /Fd$(PROG1_OBJDIR)\ /c $<
367
368{$(SRCDIR)\src\lib}.c{$(PROG2_OBJDIR)\..\lib}.obj:
369    $(CC_CMD) $(CC_CFLAGS) $(SPROG_CFLAGS) /Fo$(PROG2_OBJDIR)\$(@F) /Fd$(PROG2_OBJDIR)\ /c $<
370
371{$(SRCDIR)\src\lib}.c{$(PROG3_OBJDIR)\..\lib}.obj:
372    $(CC_CMD) $(CC_CFLAGS) $(SPROG_CFLAGS) /Fo$(PROG3_OBJDIR)\$(@F) /Fd$(PROG3_OBJDIR)\ /c $<
373
374# ------------------------------------------------------------- #
375# ------------------------------------------------------------- #
376# Default target when no CFG library type has been specified,   #
377# results in building target ALL for all c-ares library types.  #
378# ------------------------------------------------------------- #
379# ------------------------------------------------------------- #
380
381!IF "$(VALID_CFGSET)" == "FALSE"
382
383ALL:
384    $(MAKE) /NOLOGO /f .\Makefile.msvc  CFG=lib-release  ALL
385    $(MAKE) /NOLOGO /f .\Makefile.msvc  CFG=lib-debug    ALL
386    $(MAKE) /NOLOGO /f .\Makefile.msvc  CFG=dll-release  ALL
387    $(MAKE) /NOLOGO /f .\Makefile.msvc  CFG=dll-debug    ALL
388
389clean:
390    @-RMDIR /S /Q $(BASE_DIR) >NUL 2>&1
391
392install:
393    @$(MAKE) /nologo /f .\Makefile.msvc  CFG=lib-release  install
394    @$(MAKE) /nologo /f .\Makefile.msvc  CFG=lib-debug    install
395    @$(MAKE) /nologo /f .\Makefile.msvc  CFG=dll-release  install
396    @$(MAKE) /nologo /f .\Makefile.msvc  CFG=dll-debug    install
397
398!ENDIF
399
400# ---------------------------------------------------------------------
401# Targets only available when a proper CFG library type has been given
402# ---------------------------------------------------------------------
403
404!IF "$(VALID_CFGSET)" == "TRUE"
405
406ALL: c-ares acountry adig ahost
407    @
408
409# $(HHEADERS) $(CSOURCES)
410c-ares: $(CARES_OBJDIR) $(CARES_OBJS) $(CARES_OUTDIR)
411    $(CARES_LINK) $(CARES_LFLAGS) /out:$(CARES_OUTDIR)\$(CARES_TARGET) $(CARES_OBJS)
412!   IF "$(USE_RES_FILE)" == "TRUE"
413    @if exist $(CARES_OUTDIR)\$(CARES_TARGET).manifest mt -nologo -manifest $(CARES_OUTDIR)\$(CARES_TARGET).manifest -outputresource:$(CARES_OUTDIR)\$(CARES_TARGET);2
414!   ENDIF
415
416# acountry.c $(SAMPLESOURCES) $(SAMPLEHEADERS)
417acountry: c-ares $(PROG1_OBJDIR) $(PROG1_OBJS) $(PROG1_OUTDIR)
418    $(SPROG_LINK) $(SPROG_LFLAGS) /out:$(PROG1_OUTDIR)\acountry.exe $(PROG1_OBJS:..\lib=)
419    @if exist $(PROG1_OUTDIR)\acountry.exe.manifest mt -nologo -manifest $(PROG1_OUTDIR)\acountry.exe.manifest -outputresource:$(PROG1_OUTDIR)\acountry.exe;1
420
421# adig.c $(SAMPLESOURCES) $(SAMPLEHEADERS)
422adig: c-ares  $(PROG2_OBJDIR) $(PROG2_OBJS) $(PROG2_OUTDIR)
423    $(SPROG_LINK) $(SPROG_LFLAGS) /out:$(PROG2_OUTDIR)\adig.exe $(PROG2_OBJS:..\lib=)
424    @if exist $(PROG2_OUTDIR)\adig.exe.manifest mt -nologo -manifest $(PROG2_OUTDIR)\adig.exe.manifest -outputresource:$(PROG2_OUTDIR)\adig.exe;1
425
426# ahost.c $(SAMPLESOURCES) $(SAMPLEHEADERS)
427ahost: c-ares $(PROG3_OBJDIR) $(PROG3_OBJS) $(PROG3_OUTDIR)
428    $(SPROG_LINK) $(SPROG_LFLAGS) /out:$(PROG3_OUTDIR)\ahost.exe $(PROG3_OBJS:..\lib=)
429    @if exist $(PROG3_OUTDIR)\ahost.exe.manifest mt -nologo -manifest $(PROG3_OUTDIR)\ahost.exe.manifest -outputresource:$(PROG3_OUTDIR)\ahost.exe;1
430
431$(CARES_OUTDIR): $(CARES_DIR)
432    @if not exist $(CARES_OUTDIR) mkdir $(CARES_OUTDIR)
433
434$(PROG1_OUTDIR): $(PROG1_DIR)
435    @if not exist $(PROG1_OUTDIR) mkdir $(PROG1_OUTDIR)
436
437$(PROG2_OUTDIR): $(PROG2_DIR)
438    @if not exist $(PROG2_OUTDIR) mkdir $(PROG2_OUTDIR)
439
440$(PROG3_OUTDIR): $(PROG3_DIR)
441    @if not exist $(PROG3_OUTDIR) mkdir $(PROG3_OUTDIR)
442
443$(CARES_OBJDIR): $(CARES_OUTDIR)
444    @if not exist $(CARES_OBJDIR) mkdir $(CARES_OBJDIR)
445
446$(PROG1_OBJDIR): $(PROG1_OUTDIR)
447    @if not exist $(PROG1_OBJDIR) mkdir $(PROG1_OBJDIR)
448
449$(PROG2_OBJDIR): $(PROG2_OUTDIR)
450    @if not exist $(PROG2_OBJDIR) mkdir $(PROG2_OBJDIR)
451
452$(PROG3_OBJDIR): $(PROG3_OUTDIR)
453    @if not exist $(PROG3_OBJDIR) mkdir $(PROG3_OBJDIR)
454
455clean:
456    @-RMDIR /S /Q $(CARES_OUTDIR) >NUL 2>&1
457    @-RMDIR /S /Q $(PROG1_OUTDIR) >NUL 2>&1
458    @-RMDIR /S /Q $(PROG2_OUTDIR) >NUL 2>&1
459    @-RMDIR /S /Q $(PROG3_OUTDIR) >NUL 2>&1
460
461install:
462    @if not exist $(CARES_OUTDIR)\$(CARES_TARGET) \
463        $(MAKE) /f .\Makefile.msvc CFG=$(CFG) c-ares
464    @if not exist "$(INSTALL_DIR)"     mkdir "$(INSTALL_DIR)"
465    @if not exist "$(INSTALL_DIR_LIB)" mkdir "$(INSTALL_DIR_LIB)"
466    @if not exist "$(INSTALL_DIR_INC)" mkdir "$(INSTALL_DIR_INC)"
467    @copy /y $(CARES_OUTDIR)\*.*              "$(INSTALL_DIR_LIB)" >NUL
468    @copy /y $(SRCDIR)\include\ares.h         "$(INSTALL_DIR_INC)" >NUL
469    @copy /y $(SRCDIR)\include\ares_build.h   "$(INSTALL_DIR_INC)" >NUL
470    @copy /y $(SRCDIR)\include\ares_rules.h   "$(INSTALL_DIR_INC)" >NUL
471    @copy /y $(SRCDIR)\include\ares_version.h "$(INSTALL_DIR_INC)" >NUL
472    @echo Installed c-ares $(CFG)
473
474!ENDIF
475
476$(BASE_DIR):
477    @if not exist $(BASE_DIR) mkdir $(BASE_DIR)
478
479$(CARES_DIR): $(BASE_DIR)
480    @if not exist $(CARES_DIR) mkdir $(CARES_DIR)
481
482$(PROG1_DIR): $(BASE_DIR)
483    @if not exist $(PROG1_DIR) mkdir $(PROG1_DIR)
484
485$(PROG2_DIR): $(BASE_DIR)
486    @if not exist $(PROG2_DIR) mkdir $(PROG2_DIR)
487
488$(PROG3_DIR): $(BASE_DIR)
489    @if not exist $(PROG3_DIR) mkdir $(PROG3_DIR)
490
491# End of Makefile.msvc
492