@echo off chcp 65001 >nul setlocal enabledelayedexpansion set "ROOT=%~dp0" set "TOOLS=%ROOT%tools\" :: ============================================================ :: 1. 检查 tools\ 工具链 :: ============================================================ echo [dstalk] 检查工具链... if not exist "%TOOLS%cmake\bin\cmake.exe" ( echo [ERROR] CMake 未找到,请先运行: tools\setup.bat pause & exit /b 1 ) if not exist "%TOOLS%ninja\ninja.exe" ( echo [ERROR] Ninja 未找到,请先运行: tools\setup.bat pause & exit /b 1 ) if not exist "%TOOLS%llvm\bin\clang.exe" ( echo [ERROR] LLVM/Clang 未找到,请先运行: tools\setup.bat pause & exit /b 1 ) if not exist "%TOOLS%.venv\Scripts\conan.exe" ( echo [ERROR] Conan2 未找到,请先运行: tools\setup.bat echo 需要已安装 Python 3.10+ pause & exit /b 1 ) :: ============================================================ :: 2. 加载 tools\ 环境 :: ============================================================ call "%TOOLS%env.bat" :: ============================================================ :: 3. 检测并加载 MSVC 环境 :: ============================================================ set "VCVARS=" for %%v in (2022 2019 2017) do ( for %%e in (Professional Community Enterprise BuildTools) do ( if exist "C:\Program Files (x86)\Microsoft Visual Studio\%%v\%%e\VC\Auxiliary\Build\vcvarsall.bat" ( set "VCVARS=C:\Program Files (x86)\Microsoft Visual Studio\%%v\%%e\VC\Auxiliary\Build\vcvarsall.bat" ) if exist "C:\Program Files\Microsoft Visual Studio\%%v\%%e\VC\Auxiliary\Build\vcvarsall.bat" ( set "VCVARS=C:\Program Files\Microsoft Visual Studio\%%v\%%e\VC\Auxiliary\Build\vcvarsall.bat" ) ) ) if "%VCVARS%"=="" ( echo [ERROR] 未找到 Visual Studio Build Tools echo 请安装: https://visualstudio.microsoft.com/downloads/#build-tools-for-visual-studio-2022 pause & exit /b 1 ) echo [dstalk] 加载 MSVC 环境... call "%VCVARS%" x64 >nul 2>&1 :: ============================================================ :: 4. 强制使用 tools\ 内的编译器 (覆盖 MSVC 的 cl.exe) :: ============================================================ set "CC=%TOOLS%llvm\bin\clang.exe" set "CXX=%TOOLS%llvm\bin\clang++.exe" cd /d "%ROOT%" :: ============================================================ :: 5. Conan 安装依赖 :: ============================================================ echo [dstalk] Conan 安装/刷新依赖... call "%TOOLS%.venv\Scripts\conan.exe" install deps/ -of build --build=missing -s compiler.cppstd=20 -c tools.cmake.cmaketoolchain:generator=Ninja if !errorlevel! neq 0 ( echo [ERROR] Conan 安装失败 pause & exit /b 1 ) set "CONAN_GENERATORS=%ROOT%build\build\Release\generators" :: ============================================================ :: 6. CMake 配置 + Ninja 编译 :: ============================================================ echo [dstalk] CMake 配置 + 编译... "%TOOLS%cmake\bin\cmake.exe" -S "%ROOT%" -B "%ROOT%build" -G Ninja ^ -DCMAKE_C_COMPILER="%TOOLS%llvm\bin\clang.exe" ^ -DCMAKE_CXX_COMPILER="%TOOLS%llvm\bin\clang++.exe" ^ -DCMAKE_TOOLCHAIN_FILE="%CONAN_GENERATORS%\conan_toolchain.cmake" ^ -DCMAKE_PREFIX_PATH="%CONAN_GENERATORS%" ^ -DCMAKE_BUILD_TYPE=Release if !errorlevel! neq 0 ( echo [ERROR] CMake 配置失败 pause & exit /b 1 ) "%TOOLS%cmake\bin\cmake.exe" --build "%ROOT%build" if !errorlevel! neq 0 ( echo [ERROR] 编译失败 pause & exit /b 1 ) echo. echo ============================================ echo 编译成功! echo build\dstalk-core\dstalk.dll echo build\dstalk-cli\dstalk-cli.exe echo ============================================ pause