docs: add Windows build instructions and script
This commit is contained in:
100
build-windows.ps1
Normal file
100
build-windows.ps1
Normal file
@@ -0,0 +1,100 @@
|
||||
param(
|
||||
[Parameter(Mandatory = $true)]
|
||||
[string]$QtPrefix,
|
||||
|
||||
[string]$BuildDir = "build-windows",
|
||||
[string]$DistDir = "dist-windows\chengnan",
|
||||
[string]$Generator = "Visual Studio 17 2022",
|
||||
[string]$Arch = "x64",
|
||||
[ValidateSet("Debug", "Release", "RelWithDebInfo", "MinSizeRel")]
|
||||
[string]$Config = "Release"
|
||||
)
|
||||
|
||||
$ErrorActionPreference = "Stop"
|
||||
|
||||
function Resolve-FullPath([string]$PathValue) {
|
||||
if ([System.IO.Path]::IsPathRooted($PathValue)) {
|
||||
return [System.IO.Path]::GetFullPath($PathValue)
|
||||
}
|
||||
return [System.IO.Path]::GetFullPath((Join-Path (Get-Location) $PathValue))
|
||||
}
|
||||
|
||||
function Require-Command([string]$Name) {
|
||||
$command = Get-Command $Name -ErrorAction SilentlyContinue
|
||||
if (-not $command) {
|
||||
throw "找不到命令:$Name。请先安装并加入 PATH。"
|
||||
}
|
||||
return $command.Source
|
||||
}
|
||||
|
||||
$ProjectDir = Split-Path -Parent $MyInvocation.MyCommand.Path
|
||||
Set-Location $ProjectDir
|
||||
|
||||
$QtPrefix = Resolve-FullPath $QtPrefix
|
||||
$BuildPath = Resolve-FullPath $BuildDir
|
||||
$DistPath = Resolve-FullPath $DistDir
|
||||
$QtBin = Join-Path $QtPrefix "bin"
|
||||
$WinDeployQt = Join-Path $QtBin "windeployqt.exe"
|
||||
|
||||
if (-not (Test-Path $QtPrefix)) {
|
||||
throw "QtPrefix 不存在:$QtPrefix"
|
||||
}
|
||||
|
||||
if (-not (Test-Path $WinDeployQt)) {
|
||||
throw "找不到 windeployqt:$WinDeployQt。请确认 -QtPrefix 指向 Qt 套件目录,例如 C:\Qt\6.7.2\msvc2019_64。"
|
||||
}
|
||||
|
||||
Require-Command "cmake" | Out-Null
|
||||
|
||||
$env:PATH = "$QtBin;$env:PATH"
|
||||
$env:CMAKE_PREFIX_PATH = $QtPrefix
|
||||
|
||||
Write-Host "== chengnan Windows 构建 ==" -ForegroundColor Cyan
|
||||
Write-Host "项目目录:$ProjectDir"
|
||||
Write-Host "Qt 目录:$QtPrefix"
|
||||
Write-Host "构建目录:$BuildPath"
|
||||
Write-Host "发布目录:$DistPath"
|
||||
Write-Host "生成器:$Generator"
|
||||
Write-Host "配置:$Config"
|
||||
|
||||
$configureArgs = @(
|
||||
"-S", $ProjectDir,
|
||||
"-B", $BuildPath,
|
||||
"-G", $Generator,
|
||||
"-DCMAKE_PREFIX_PATH=$QtPrefix"
|
||||
)
|
||||
|
||||
if ($Generator -like "Visual Studio*") {
|
||||
$configureArgs += @("-A", $Arch)
|
||||
} else {
|
||||
$configureArgs += "-DCMAKE_BUILD_TYPE=$Config"
|
||||
}
|
||||
|
||||
Write-Host "`n== 配置 CMake ==" -ForegroundColor Cyan
|
||||
& cmake @configureArgs
|
||||
|
||||
Write-Host "`n== 编译 ==" -ForegroundColor Cyan
|
||||
& cmake --build $BuildPath --config $Config --parallel
|
||||
|
||||
$ExeCandidates = @(
|
||||
(Join-Path $BuildPath "$Config\chengnan.exe"),
|
||||
(Join-Path $BuildPath "chengnan.exe")
|
||||
)
|
||||
$ExePath = $ExeCandidates | Where-Object { Test-Path $_ } | Select-Object -First 1
|
||||
if (-not $ExePath) {
|
||||
throw "构建完成但找不到 chengnan.exe。已检查:$($ExeCandidates -join ', ')"
|
||||
}
|
||||
|
||||
Write-Host "`n== 准备发布目录 ==" -ForegroundColor Cyan
|
||||
if (Test-Path $DistPath) {
|
||||
Remove-Item -Recurse -Force $DistPath
|
||||
}
|
||||
New-Item -ItemType Directory -Force -Path $DistPath | Out-Null
|
||||
Copy-Item $ExePath $DistPath
|
||||
|
||||
Write-Host "`n== 收集 Qt 运行库 ==" -ForegroundColor Cyan
|
||||
$DistExe = Join-Path $DistPath "chengnan.exe"
|
||||
& $WinDeployQt --release --no-translations $DistExe
|
||||
|
||||
Write-Host "`n构建完成:$DistExe" -ForegroundColor Green
|
||||
Write-Host "请整体复制目录:$DistPath"
|
||||
Reference in New Issue
Block a user