# Configure + build from any shell: enters the x86 MSVC environment first. # .\build.ps1 # x86-debug # .\build.ps1 x86-release param([string]$Preset = "x86-debug") $ErrorActionPreference = "Stop" $vswhere = "${env:ProgramFiles(x86)}\Microsoft Visual Studio\Installer\vswhere.exe" $vs = & $vswhere -latest -products * -requires Microsoft.VisualStudio.Component.VC.Tools.x86.x64 -property installationPath if (-not $vs) { throw "MSVC x86 tools not found (install VS Build Tools with 'Desktop development with C++')." } $vcvars = Join-Path $vs "VC\Auxiliary\Build\vcvarsall.bat" # vcvarsall itself calls vswhere and expects it on PATH. $env:PATH = "$(Split-Path $vswhere);$env:PATH" # Configure only once: the build re-runs CMake itself when needed, and # re-configuring here would clash with VS Code's CMake Tools, which caches # the full path of cl.exe instead of the preset's plain "cl". $configure = if (Test-Path "build\$Preset\CMakeCache.txt") { "" } else { "cmake --preset $Preset && " } # 2>&1 inside cmd: Windows PowerShell turns any native stderr line (e.g. CMake's # download progress) into a terminating error under ErrorActionPreference=Stop. cmd /c "`"$vcvars`" x86 >nul && $configure cmake --build --preset $Preset 2>&1" if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE }