Files
wnmj-normal/Servers/Build_all.bat
2026-03-03 13:56:44 +08:00

249 lines
7.1 KiB
Batchfile

@echo off
chcp 936 >nul
setlocal enabledelayedexpansion
echo ============================================
echo 服务端全部组件编译工具
echo ============================================
echo.
:: ======== MSBuild ========
set "MSBUILD=C:\PROGRA~2\MSBuild\12.0\Bin\MSBuild.exe"
if not exist "%MSBUILD%" (
echo [错误] 找不到 MSBuild: %MSBUILD%
echo 请确认已安装 Visual Studio 2013
pause
exit /b 1
)
:: ======== 项目路径 ========
set "SERVER_ROOT=%~dp0"
set "PLATFORM_SLN=%SERVER_ROOT%Platform.sln"
set "GAME_ROOT=%SERVER_ROOT%游戏组件"
set "RUN_DIR=%SERVER_ROOT%..\运行"
set "RELEASE_OUT=%RUN_DIR%\Release\Ansi"
set "DEBUG_OUT=%RUN_DIR%\Debug\Ansi"
:: ======== MFC/CRT DLL 路径 (VS2013) ========
set "VS_REDIST=C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\redist"
set "MFC_REL=!VS_REDIST!\x86\Microsoft.VC120.MFC"
set "CRT_REL=!VS_REDIST!\x86\Microsoft.VC120.CRT"
set "MFC_DBG=!VS_REDIST!\Debug_NonRedist\x86\Microsoft.VC120.DebugMFC"
set "CRT_DBG=!VS_REDIST!\Debug_NonRedist\x86\Microsoft.VC120.DebugCRT"
:: ======== 计数器 ========
set STEP=0
set PLATFORM_R=0
set PLATFORM_D=0
set GAME_TOTAL=0
set GAME_SR=0
set GAME_SD=0
set GAME_FR=0
set GAME_FD=0
set "FAIL_LIST="
echo MSBuild: %MSBUILD%
echo 平台方案: !PLATFORM_SLN!
echo 游戏组件: !GAME_ROOT!
echo Release输出: !RELEASE_OUT!
echo Debug输出: !DEBUG_OUT!
echo.
:: ============================================================
:: [第1步] 编译 Platform.sln (服务端核心组件)
:: ============================================================
set /a STEP+=1
echo ============================================
echo [第!STEP!步] 编译服务端核心组件 (Platform.sln)
echo ============================================
echo 包含: 服务核心/内核引擎/网络服务/协调服务器
echo 登录服务器/模块管理/游戏服务/游戏服务器
echo 私人场服务/网站网关服务器/比赛服务
echo.
echo ^> Release 编译中...
"!MSBUILD!" "!PLATFORM_SLN!" /t:Build /p:Configuration=Release /p:Platform=Win32 /m /nologo /v:minimal
if !errorlevel! equ 0 (
echo ^> Platform Release [成功]
set PLATFORM_R=1
) else (
echo ^> Platform Release [失败]
set "FAIL_LIST=!FAIL_LIST! Platform-Release"
)
echo ^> Debug 编译中...
"!MSBUILD!" "!PLATFORM_SLN!" /t:Build /p:Configuration=Debug /p:Platform=Win32 /m /nologo /v:minimal
if !errorlevel! equ 0 (
echo ^> Platform Debug [成功]
set PLATFORM_D=1
) else (
echo ^> Platform Debug [失败]
set "FAIL_LIST=!FAIL_LIST! Platform-Debug"
)
echo.
:: ============================================================
:: [第2步] 编译游戏组件
:: ============================================================
set /a STEP+=1
echo ============================================
echo [第!STEP!步] 编译游戏组件
echo ============================================
echo.
if not exist "!GAME_ROOT!" (
echo [警告] 找不到游戏组件目录: !GAME_ROOT!
echo 跳过游戏组件编译
) else (
for /d %%G in ("!GAME_ROOT!\*") do (
if exist "%%G\GameProject.sln" (
set /a GAME_TOTAL+=1
set "GAME_NAME=%%~nxG"
echo --------------------------------------------
echo [!GAME_TOTAL!] 游戏: !GAME_NAME!
echo --------------------------------------------
echo ^> Release...
"!MSBUILD!" "%%G\GameProject.sln" /t:Build /p:Configuration=Release /p:Platform=Win32 /m /nologo /v:minimal
if !errorlevel! equ 0 (
echo ^> Release [成功]
set /a GAME_SR+=1
) else (
echo ^> Release [失败]
set /a GAME_FR+=1
set "FAIL_LIST=!FAIL_LIST! !GAME_NAME!-Release"
)
echo ^> Debug...
"!MSBUILD!" "%%G\GameProject.sln" /t:Build /p:Configuration=Debug /p:Platform=Win32 /m /nologo /v:minimal
if !errorlevel! equ 0 (
echo ^> Debug [成功]
set /a GAME_SD+=1
) else (
echo ^> Debug [失败]
set /a GAME_FD+=1
set "FAIL_LIST=!FAIL_LIST! !GAME_NAME!-Debug"
)
echo.
)
)
)
:: ============================================================
:: [第3步] 打包MFC/CRT运行时DLL
:: ============================================================
set /a STEP+=1
echo ============================================
echo [第!STEP!步] 打包MFC/CRT运行时DLL
echo ============================================
echo.
set COPY_OK=0
set COPY_FAIL=0
:: 确保输出目录存在
if not exist "!RELEASE_OUT!" mkdir "!RELEASE_OUT!"
if not exist "!DEBUG_OUT!" mkdir "!DEBUG_OUT!"
:: --- Release MFC ---
echo 复制 Release MFC/CRT DLL...
for %%F in (mfc120.dll mfcm120.dll) do (
if exist "!MFC_REL!\%%F" (
copy /y "!MFC_REL!\%%F" "!RELEASE_OUT!\%%F" >nul
if !errorlevel! equ 0 (
echo %%F [OK]
set /a COPY_OK+=1
) else (
echo %%F [失败]
set /a COPY_FAIL+=1
)
) else (
echo %%F [未找到源文件]
set /a COPY_FAIL+=1
)
)
:: --- Release CRT ---
for %%F in (msvcr120.dll msvcp120.dll) do (
if exist "!CRT_REL!\%%F" (
copy /y "!CRT_REL!\%%F" "!RELEASE_OUT!\%%F" >nul
if !errorlevel! equ 0 (
echo %%F [OK]
set /a COPY_OK+=1
) else (
echo %%F [失败]
set /a COPY_FAIL+=1
)
) else (
echo %%F [未找到源文件]
set /a COPY_FAIL+=1
)
)
echo.
:: --- Debug MFC ---
echo 复制 Debug MFC/CRT DLL...
for %%F in (mfc120d.dll mfcm120d.dll) do (
if exist "!MFC_DBG!\%%F" (
copy /y "!MFC_DBG!\%%F" "!DEBUG_OUT!\%%F" >nul
if !errorlevel! equ 0 (
echo %%F [OK]
set /a COPY_OK+=1
) else (
echo %%F [失败]
set /a COPY_FAIL+=1
)
) else (
echo %%F [未找到源文件]
set /a COPY_FAIL+=1
)
)
:: --- Debug CRT ---
for %%F in (msvcr120d.dll msvcp120d.dll) do (
if exist "!CRT_DBG!\%%F" (
copy /y "!CRT_DBG!\%%F" "!DEBUG_OUT!\%%F" >nul
if !errorlevel! equ 0 (
echo %%F [OK]
set /a COPY_OK+=1
) else (
echo %%F [失败]
set /a COPY_FAIL+=1
)
) else (
echo %%F [未找到源文件]
set /a COPY_FAIL+=1
)
)
echo.
:: ============================================================
:: 编译汇总
:: ============================================================
echo ============================================
echo 编译汇总
echo ============================================
echo.
echo --- 服务端核心 (Platform.sln) ---
if !PLATFORM_R! equ 1 (echo Release: 成功) else (echo Release: 失败)
if !PLATFORM_D! equ 1 (echo Debug: 成功) else (echo Debug: 失败)
echo.
echo --- 游戏组件 ---
echo 组件总数: !GAME_TOTAL!
echo Release 成功/失败: !GAME_SR!/!GAME_FR!
echo Debug 成功/失败: !GAME_SD!/!GAME_FD!
echo.
echo --- MFC/CRT DLL 打包 ---
echo 复制成功: !COPY_OK!
echo 复制失败: !COPY_FAIL!
echo.
if defined FAIL_LIST (
echo 失败列表:
echo !FAIL_LIST!
echo.
)
echo Release 输出: !RELEASE_OUT!
echo Debug 输出: !DEBUG_OUT!
echo ============================================
echo.
pause