quickjs-tart

quickjs-based runtime for wallet-core logic
Log | Files | Refs | README | LICENSE

Makefile.msvc (16429B)


      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 
     45 NAME = cares
     46 
     47 # ------------------------------------------------
     48 # c-ares static and dynamic libraries common base
     49 # file names for release and debug configurations
     50 # ------------------------------------------------
     51 
     52 STA_LIB_REL = lib$(NAME)
     53 DYN_LIB_REL = $(NAME)
     54 STA_LIB_DBG = $(STA_LIB_REL)d
     55 DYN_LIB_DBG = $(DYN_LIB_REL)d
     56 
     57 # -------------------------------------------
     58 # Base names for c-ares DLL import libraries
     59 # -------------------------------------------
     60 
     61 IMP_LIB_REL = $(DYN_LIB_REL)
     62 IMP_LIB_DBG = $(DYN_LIB_DBG)
     63 
     64 # --------------------------
     65 # Runtime library selection
     66 # --------------------------
     67 
     68 RTLIB  = /MD
     69 RTLIBD = /MDd
     70 
     71 !IF "$(RTLIBCFG)" == "static"
     72 RTLIB  = /MT
     73 RTLIBD = /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
     82 USE_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 
     99 BASE_DIR = .\msvc
    100 
    101 # ----------------------------------------
    102 # Subdir holding sources for all projects
    103 # ----------------------------------------
    104 
    105 SRCDIR = .
    106 
    107 # -----------------------------
    108 # Default installation subdirs
    109 # -----------------------------
    110 
    111 !IFNDEF INSTALL_DIR
    112 INSTALL_DIR = .
    113 !ENDIF
    114 
    115 !IFNDEF INSTALL_DIR_LIB
    116 INSTALL_DIR_LIB = $(INSTALL_DIR)\lib
    117 !ENDIF
    118 
    119 !IFNDEF INSTALL_DIR_INC
    120 INSTALL_DIR_INC = $(INSTALL_DIR)\include
    121 !ENDIF
    122 
    123 # -------------------------
    124 # Configuration validation
    125 # -------------------------
    126 
    127 VALID_CFGSET = FALSE
    128 !IF "$(CFG)" == "lib-release" || "$(CFG)" == "lib-debug" || \
    129     "$(CFG)" == "dll-release" || "$(CFG)" == "dll-debug"
    130 VALID_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 
    153 CARES_DIR = $(BASE_DIR)\cares
    154 PROG2_DIR = $(BASE_DIR)\adig
    155 PROG3_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"
    163 CARES_OUTDIR = $(CARES_DIR)\$(CFG)
    164 PROG2_OUTDIR = $(PROG2_DIR)\$(CFG)
    165 PROG3_OUTDIR = $(PROG3_DIR)\$(CFG)
    166 CARES_OBJDIR = $(CARES_OUTDIR)\obj
    167 PROG2_OBJDIR = $(PROG2_OUTDIR)\obj
    168 PROG3_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"
    183 CFLAGS  = /D_WIN32_WINNT=0x0602 /DWATT32 /I$(WATT_ROOT)\inc
    184 !  IFNDEF PLATFORM
    185 PLATFORM = x86
    186 !  ENDIF
    187 EX_LIBS_REL = $(WATT_ROOT)\lib\$(PLATFORM)\wattcpvc_imp.lib advapi32.lib
    188 EX_LIBS_DBG = $(WATT_ROOT)\lib\$(PLATFORM)\wattcpvc_imp_d.lib advapi32.lib
    189 !ELSE
    190 CFLAGS  = /D_WIN32_WINNT=0x0602
    191 EX_LIBS_REL = ws2_32.lib advapi32.lib kernel32.lib iphlpapi.lib
    192 EX_LIBS_DBG = ws2_32.lib advapi32.lib kernel32.lib iphlpapi.lib
    193 !ENDIF
    194 
    195 
    196 # ----------------------------
    197 # Assorted commands and flags
    198 # ----------------------------
    199 
    200 CC_CMD_REL = cl.exe /nologo $(RTLIB) /DNDEBUG /O2
    201 CC_CMD_DBG = cl.exe /nologo $(RTLIBD) /D_DEBUG /Od /Zi /RTCsu
    202 CC_CFLAGS  = $(CFLAGS) /D_REENTRANT /I.\src\lib /I.\include /I.\src\lib\include /W3 /EHsc /FD
    203 
    204 RC_CMD_REL = rc.exe /l 0x409 /d "NDEBUG"
    205 RC_CMD_DBG = rc.exe /l 0x409 /d "_DEBUG"
    206 
    207 LINK_CMD_LIB = link.exe /lib /nologo
    208 LINK_CMD_DLL = link.exe /dll /nologo /incremental:no /fixed:no
    209 LINK_CMD_EXE = link.exe /nologo /incremental:no /fixed:no /subsystem:console
    210 
    211 LINK_CMD_EXE_REL = $(LINK_CMD_EXE) /release
    212 LINK_CMD_EXE_DBG = $(LINK_CMD_EXE) /debug
    213 
    214 # ---------------------------------
    215 # Configuration dependent settings
    216 # ---------------------------------
    217 
    218 !IF "$(CFG)" == "lib-release"
    219 CARES_TARGET = $(STA_LIB_REL).lib
    220 CARES_CFLAGS = /DCARES_BUILDING_LIBRARY /DCARES_STATICLIB
    221 CARES_LFLAGS =
    222 SPROG_CFLAGS = /DCARES_STATICLIB /DCARES_NO_DEPRECATED
    223 SPROG_LFLAGS = /libpath:$(CARES_OUTDIR) $(EX_LIBS_REL) $(STA_LIB_REL).lib
    224 CARES_LINK   = $(LINK_CMD_LIB)
    225 SPROG_LINK   = $(LINK_CMD_EXE_REL)
    226 CC_CMD       = $(CC_CMD_REL)
    227 !ENDIF
    228 
    229 !IF "$(CFG)" == "lib-debug"
    230 CARES_TARGET = $(STA_LIB_DBG).lib
    231 CARES_CFLAGS = /DCARES_BUILDING_LIBRARY /DCARES_STATICLIB /DDEBUGBUILD
    232 CARES_LFLAGS =
    233 SPROG_CFLAGS = /DCARES_STATICLIB /DCARES_NO_DEPRECATED
    234 SPROG_LFLAGS = /libpath:$(CARES_OUTDIR) $(EX_LIBS_DBG) $(STA_LIB_DBG).lib
    235 CARES_LINK   = $(LINK_CMD_LIB)
    236 SPROG_LINK   = $(LINK_CMD_EXE_DBG)
    237 CC_CMD       = $(CC_CMD_DBG)
    238 !ENDIF
    239 
    240 !IF "$(CFG)" == "dll-release"
    241 CARES_TARGET = $(DYN_LIB_REL).dll
    242 CARES_CFLAGS = /DCARES_BUILDING_LIBRARY
    243 CARES_LFLAGS = /release $(EX_LIBS_REL) /implib:$(CARES_OUTDIR)\$(IMP_LIB_REL).lib
    244 SPROG_CFLAGS = /DCARES_NO_DEPRECATED
    245 SPROG_LFLAGS = /libpath:$(CARES_OUTDIR) $(EX_LIBS_REL) $(IMP_LIB_REL).lib
    246 CARES_LINK   = $(LINK_CMD_DLL)
    247 SPROG_LINK   = $(LINK_CMD_EXE_REL)
    248 CC_CMD       = $(CC_CMD_REL)
    249 USE_RES_FILE = TRUE
    250 RC_CMD       = $(RC_CMD_REL)
    251 !ENDIF
    252 
    253 !IF "$(CFG)" == "dll-debug"
    254 CARES_TARGET = $(DYN_LIB_DBG).dll
    255 CARES_CFLAGS = /DCARES_BUILDING_LIBRARY /DDEBUGBUILD
    256 CARES_LFLAGS = /debug $(EX_LIBS_DBG) /implib:$(CARES_OUTDIR)\$(IMP_LIB_DBG).lib /pdb:$(CARES_OUTDIR)\$(DYN_LIB_DBG).pdb
    257 SPROG_CFLAGS = /DCARES_NO_DEPRECATED
    258 SPROG_LFLAGS = /libpath:$(CARES_OUTDIR) $(EX_LIBS_DBG) $(IMP_LIB_DBG).lib
    259 CARES_LINK   = $(LINK_CMD_DLL)
    260 SPROG_LINK   = $(LINK_CMD_EXE_DBG)
    261 CC_CMD       = $(CC_CMD_DBG)
    262 USE_RES_FILE = TRUE
    263 RC_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
    286 CARES_OBJS = $(CARES_OBJS:.c=.obj)
    287 CARES_OBJS = $(CARES_OBJS:/=\)
    288 !IF "$(USE_RES_FILE)" == "TRUE"
    289 CARES_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
    299 PROG2_OBJS = $(PROG2_OBJS:.c=.obj)
    300 PROG2_OBJS = $(PROG2_OBJS:/=\)
    301 PROG2_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
    310 PROG3_OBJS = $(PROG3_OBJS:.c=.obj)
    311 PROG3_OBJS = $(PROG3_OBJS:/=\)
    312 PROG3_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 
    363 ALL:
    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 
    369 clean:
    370     @-RMDIR /S /Q $(BASE_DIR) >NUL 2>&1
    371 
    372 install:
    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 
    386 ALL: c-ares adig ahost
    387     @
    388 
    389 # $(HHEADERS) $(CSOURCES)
    390 c-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)
    397 adig: 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)
    402 ahost: 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 
    432 clean:
    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 
    445 install:
    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