Files
fanlusky 2ca7414e5c fix(windows): lcompile-release 以 generate.stamp 判断是否需要重新配置
配置失败(例如 vcpkg 安装出错)时 CMakeCache.txt 依然会留下,导致之后
直接跳过 configure、在残缺的构建目录上编译。改为检查只有项目生成成功才
会写入的 CMakeFiles/generate.stamp。
2026-09-26 16:00:59 +08:00

28 lines
1.6 KiB
PowerShell

# Build the TSF DLL without depending on the caller's working directory.
[CmdletBinding()]
param(
[ValidateSet('32', '64')][string]$Architecture = '64',
# ALL_BUILD also builds test_windows_ipc_contract and the tests/ subdirectory, neither of which
# is packaged. Naming the DLL target keeps a local packaging run from paying for them; the test
# jobs still build ALL_BUILD by passing -Target ALL_BUILD.
[string]$Target = 'MetasequoiaImeTsf',
# The Visual Studio generator wires ZERO_CHECK into every target, so a build regenerates itself
# whenever CMakeLists.txt changes. Re-running configure up front only costs ~10s per build
# directory without changing the result, so do it once and let ZERO_CHECK handle the rest.
[switch]$Reconfigure
)
$ErrorActionPreference = 'Stop'
$projectRoot = Split-Path -Parent $PSScriptRoot
$buildDirectory = Join-Path $projectRoot "build$Architecture-release"
Push-Location $projectRoot
try {
# A failed configure (e.g. vcpkg install error) still leaves CMakeCache.txt behind, so key off
# generate.stamp, which is only written once project generation succeeds.
if ($Reconfigure -or -not (Test-Path -LiteralPath (Join-Path $buildDirectory 'CMakeFiles\generate.stamp'))) {
cmake "--preset=for$Architecture-release"
if ($LASTEXITCODE -ne 0) { throw "TSF $Architecture configure failed ($LASTEXITCODE)" }
}
cmake --build $buildDirectory --config Release --target $Target --parallel
if ($LASTEXITCODE -ne 0) { throw "TSF $Architecture build failed ($LASTEXITCODE)" }
} finally { Pop-Location }