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