mk.bat
@echo on
@setlocal
@echo ===============================================================
@echo Windows 32bit 控制台程序 自动编译脚本
@echo ===============================================================
@set DISPLAY=echo -
@rem *********************************************************
@set MAKE=nmake /NOLOGO
@set OUTPUT=bin
@set MKFILE=nmakefile.mk
@rem *********************************************************
@%DISPLAY% 参数检查
@rem *********************************************************
@IF NOT EXIST %OUTPUT% @mkdir %OUTPUT%
@IF not "%1" == "" (
@IF /i "%1" == "clean" goto clean && goto end
@IF /i "%1" == "debug" goto debug
@IF /i "%1" == "release" ( goto release
) else (
@echo -!- Wrong compiled parameter "%1"
@goto end
)
) else (
@goto debug
)
@rem **************************************************************************
:debug
@echo ==^> compile DEBUG version
@set EXE_FLAG=dbg
@%MAKE% DEBUG_FLAG=/D_DEBUG THREAD_LINK=/MDd EXE_FLAG=%EXE_FLAG% OUTPUT=%OUTPUT% /f %MKFILE%
@IF %ERRORLEVEL% NEQ 0 goto end
@goto result
:release
@echo ==^> compile RELEASE version
@set EXE_FLAG=rel
@%MAKE% DEBUG_FLAG=/DNDEBUG THREAD_LINK=/MT EXE_FLAG=%EXE_FLAG% OUTPUT=%OUTPUT% /f %MKFILE%
@IF %ERRORLEVEL% NEQ 0 goto end
@goto result
@rem **************************************************************************
:result
@echo:
@echo ----------------- result ----------------------------
@echo:
@dir %OUTPUT%\*.exe
@echo ====================================================
@echo:
@goto end
@rem **************************************************************************
:clean
@echo ==^> Clean files
@%MAKE% clean /f %MKFILE%
@rem **************************************************************************
:end
@rem 结束
@endlocal
@echo:
@rem pause
@goto :eof
[nmakefile.mk]
#*********************************************************
# 常用路径配置
VC_HOME = "D:\Program Files\Microsoft Visual Studio 10.0\VC"
WINSDK_HOME = "C:\Program Files\Microsoft SDKs\Windows\v7.0A"
BOOST_HOME = D:\boost\boost_1_49_0
# VC 配置
VC_INC = $(VC_HOME)\include
VC_LIB = $(VC_HOME)\lib
VC_BIN = $(VC_HOME)\bin
# Windows SDK 配置
WINSDK_INC = $(WINSDK_HOME)\include
WINSDK_LIB = $(WINSDK_HOME)\lib
# Boost 配置
BOOST_INC = $(BOOST_HOME)
BOOST_LIB = $(BOOST_HOME)\stage\lib
#-----------------
# BOOST宏:
#-----------------
# BOOST_ALL_DYN_LINK # 动态链接各种boost库
# BOOST_ALL_NO_LIB # 不使用boost提供的auto-link机制
# BOOST_LIB_DIAGNOSTIC # 输出程序具体链接了哪些boost库以及链接顺序
BOOST_FLAG = /DBOOST_LIB_DIAGNOSTIC
BOOST_LINK =
# libboost_system-vc100-mt-s-1_49.lib
#**************************************************************************
#--------------------------------------
# 线程和链接类型, Debug / Release
#--------------------------------------
# /MT 多线程
# /MTd 多线程调试
# /MD 多线程DLL
# /MDd 多线程DLL调试
THREAD_LINK = /MDd
DEBUG_FLAG = /D_DEBUG
EXE_FLAG = MDd_dbg
#**************************************************************************
INCS = /I .\ /I $(VC_INC) /I$(WINSDK_INC) /I $(BOOST_INC) /D_WIN32 $(BOOST_FLAG)
LIBS = /LIBPATH:$(VC_LIB) /LIBPATH:$(WINSDK_LIB) /LIBPATH:$(BOOST_LIB) $(BOOST_LINK)
#**************************************************************************
CPPFLAGS = /nologo /O2 /EHsc /D_WIN32_WINNT=0x0501 $(DEBUG_FLAG) $(THREAD_LINK) $(INCS) /c
#**************************************************************************
NO_DEF_LIB =
# /NODEFAULTLIB:libcmtd.lib
# /NODEFAULTLIB:libcmt.lib
# /NODEFAULTLIB:libcpmtd.lib
# /NODEFAULTLIB:msvcrt.lib
LINK_FLAG = /nologo /MACHINE:X86 /SUBSYSTEM:CONSOLE $(LIBS) $(NO_DEF_LIB)
#**************************************************************************
EXE = $(OUTPUT)\client_$(EXE_FLAG).exe \
$(OUTPUT)\t_thread_$(EXE_FLAG).exe \
$(OUTPUT)\chat_client_$(EXE_FLAG).exe \
$(OUTPUT)\chat_server_$(EXE_FLAG).exe \
$(OUTPUT)\t_credit_card_$(EXE_FLAG).exe \
$(OUTPUT)\t_ptime_$(EXE_FLAG).exe \
OBJS = client.obj \
t_thread.obj \
chat_client.obj \
chat_server.obj \
t_credit_card.obj \
t_ptime.obj \
all: $(OBJS) $(EXE)
#**************************************************************************
# 显示规则
$(OUTPUT)\client_$(EXE_FLAG).exe: client.obj
link /OUT:$@ $(LINK_FLAG) client.obj
$(OUTPUT)\t_thread_$(EXE_FLAG).exe: t_thread.obj
link /OUT:$@ $(LINK_FLAG) t_thread.obj
$(OUTPUT)\chat_client_$(EXE_FLAG).exe: chat_client.obj
link /OUT:$@ $(LINK_FLAG) chat_client.obj
$(OUTPUT)\chat_server_$(EXE_FLAG).exe: chat_server.obj
link /OUT:$@ $(LINK_FLAG) chat_server.obj
$(OUTPUT)\t_credit_card_$(EXE_FLAG).exe: t_credit_card.obj
link /OUT:$@ $(LINK_FLAG) t_credit_card.obj
$(OUTPUT)\t_ptime_$(EXE_FLAG).exe: t_ptime.obj
link /OUT:$@ $(LINK_FLAG) t_ptime.obj
#**************************************************************************
.cpp.obj:
$(CPP) $(CPPFLAGS) $<
#**************************************************************************
clean:
del /F /Q *.obj
#**************************************************************************