Qt半自动编译设置

导出环境变量

首先确保 Qt 环境下代码正常编译,然后导出对应的环境变量,否则会出现环境相关的问题,比如:

env error

相关配置说明:使用的是pwsh(powershell 7),直接使用cmd会有问题

比如设置:

set shell

打开对应的控制台:

open terminal

执行导出

Get-ChildItem Env: | ForEach-Object {
    $name = $_.Name
    $value = $_.Value -replace '"', '`"'
    if ($name -match '[^a-zA-Z0-9_]') {
        '${env:' + $name + '} = "' + $value + '"'
     } else {
        '$env:' + $name + ' = "' + $value + '"'
     }
 } | Set-Content -Encoding UTF8 "qt_env.ps1

使用方式

. .\qt_env.ps1

个人使用示例

项目结构

分为了三个文件:

  • main.ps1,控制流程
  • build.ps1,控制构建
  • code-update.ps1,控制代码获取

main.ps1

param (
    [string]$Note = "无更新说明"
)

./auto_build/code-update.ps1

./auto_build/build.ps1

# 时间戳
$timestamp = Get-Date -Format "yyyyMMdd_HHmmss"

# 路径配置
$exeSource = "D:\work\project\my-serial\build\Desktop_Qt_6_9_1_MSVC2022_64bit-Release\MySerial.exe"
$latestDir = "C:\Users\vv\Desktop\output\latest"
$outputDir = "C:\Users\vv\Desktop\output"
$updateFile = Join-Path $outputDir "update.txt"

# 创建目标目录(如不存在)
if (-Not (Test-Path $latestDir)) {
    New-Item -Path $latestDir -ItemType Directory | Out-Null
}

# 复制可执行文件
Write-Host ">> 正在复制 MySerial.exe 到 latest 文件夹..."
Copy-Item -Path $exeSource -Destination $latestDir -Force

# 压缩 latest 文件夹为 zip
$zipFileName = "MySerial_$timestamp.zip"
$zipFilePath = Join-Path $outputDir $zipFileName

Write-Host ">> 正在压缩为 $zipFileName..."
Compress-Archive -Path "$latestDir\*" -DestinationPath $zipFilePath -Force

# 写入更新说明
Write-Host ">> 写入更新说明到 update.txt..."
Add-Content -Path $updateFile -Value "`n时间戳:$timestamp"
Add-Content -Path $updateFile -Value "更新:$Note"

Write-Host "✅ 打包完成:$zipFilePath"
Write-Host "📝 更新说明:${updateFile}"

build.ps1

. .\qt_env.ps1

&"D:\Qt\Tools\CMake_64\bin\cmake.exe" --build D:/work/project/my-serial/build/Desktop_Qt_6_9_1_MSVC2022_64bit-Release --target all

code-update.ps1

git -C "D:\work\project\my-serial" pull

project struct


comment: