Initial commit
This commit is contained in:
@@ -0,0 +1,148 @@
|
||||
#!/bin/bash
|
||||
# MeshRay 跨平台构建脚本(go-winres)
|
||||
# ============================================
|
||||
|
||||
echo ""
|
||||
echo "========================================"
|
||||
echo " MeshRay 构建工具"
|
||||
echo " 版本:2.0.0"
|
||||
echo "========================================"
|
||||
echo ""
|
||||
|
||||
# 检测操作系统
|
||||
OS=$(uname -s)
|
||||
echo "[信息] 检测到操作系统:$OS"
|
||||
|
||||
case "$OS" in
|
||||
MINGW*|MSYS*|CYGWIN*)
|
||||
echo "[信息] Windows 环境,需要 go-winres 工具"
|
||||
RSRC_NEEDED=true
|
||||
;;
|
||||
Darwin)
|
||||
echo "[信息] macOS 环境"
|
||||
RSRC_NEEDED=false
|
||||
;;
|
||||
Linux)
|
||||
echo "[信息] Linux 环境"
|
||||
RSRC_NEEDED=false
|
||||
;;
|
||||
*)
|
||||
echo "[错误] 不支持的操作系统:$OS"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
# 1. 检查 go-winres(仅 Windows 需要)
|
||||
if [ "$RSRC_NEEDED" = true ]; then
|
||||
echo "[1/7] 检查 go-winres 工具..."
|
||||
if ! command -v go-winres &> /dev/null; then
|
||||
echo "[警告] go-winres 未安装,正在安装..."
|
||||
go install github.com/tc-hib/go-winres@latest || {
|
||||
echo "[错误] go-winres 安装失败!"
|
||||
exit 1
|
||||
}
|
||||
fi
|
||||
echo "[✓] go-winres 已安装
|
||||
|
||||
# 2. 检查配置文件
|
||||
echo "[2/7] 检查资源配置..."
|
||||
if [ ! -f "build/winres.json" ]; then
|
||||
echo "[错误] 配置文件不存在:build/winres.json"
|
||||
exit 1
|
||||
fi
|
||||
echo "[✓] 配置文件已检查"
|
||||
else
|
||||
echo "[1/3] 跳过 Windows 资源文件生成(非 Windows 平台)"
|
||||
fi
|
||||
|
||||
# 3. 生成资源文件(仅 Windows)
|
||||
if [ "$RSRC_NEEDED" = true ]; then
|
||||
echo "[3/7] 生成 Windows 资源文件..."
|
||||
go-winres make --in build/winres.json --arch amd64 || {
|
||||
echo "[错误] 资源文件生成失败!"
|
||||
exit 1
|
||||
}
|
||||
echo "[✓] 资源文件生成成功"
|
||||
|
||||
# 4. 复制 syso到 cmd/meshray 目录(仅 Windows)
|
||||
echo "[4/7] 复制资源文件到正确位置..."
|
||||
cp rsrc_windows_amd64.syso cmd/meshray/meshray.syso || {
|
||||
echo "[错误] 复制失败!"
|
||||
exit 1
|
||||
}
|
||||
echo "[✓] 资源文件已放置"
|
||||
fi
|
||||
|
||||
# 5. 编译程序(所有平台)
|
||||
echo "[$([ "$RSRC_NEEDED" = true ] && echo '5' || echo '3')/$( [ "$RSRC_NEEDED" = true ] && echo '7' || echo '3' )] 编译 MeshRay..."
|
||||
if [ "$RSRC_NEEDED" = true ]; then
|
||||
# Windows 平台:隐藏控制台窗口
|
||||
go build -ldflags="-s -w -H windowsgui" -o meshray ./cmd/meshray
|
||||
else
|
||||
# macOS/Linux: 保持控制台
|
||||
go build -ldflags="-s -w" -o meshray ./cmd/meshray
|
||||
fi
|
||||
if [ $? -ne 0 ]; then
|
||||
echo "[错误] 编译失败!"
|
||||
if [ "$RSRC_NEEDED" = true ]; then
|
||||
rm -f rsrc_*.syso
|
||||
rm -f cmd/meshray/meshray.syso
|
||||
fi
|
||||
exit 1
|
||||
fi
|
||||
echo "[✓] 编译成功"
|
||||
|
||||
# 6. 清理临时文件(仅 Windows)
|
||||
if [ "$RSRC_NEEDED" = true ]; then
|
||||
echo "[6/7] 清理临时文件..."
|
||||
rm -f rsrc_*.syso
|
||||
rm -f cmd/meshray/meshray.syso
|
||||
echo "[✓] 清理完成"
|
||||
fi
|
||||
|
||||
# 7. 验证文件(仅 Windows)
|
||||
if [ "$RSRC_NEEDED" = true ]; then
|
||||
echo "[7/7] 验证可执行文件..."
|
||||
if [ -f "meshray.exe" ]; then
|
||||
echo "[✓] 验证通过"
|
||||
else
|
||||
echo "[错误] 可执行文件未生成!"
|
||||
exit 1
|
||||
fi
|
||||
else
|
||||
echo "[3/3] 验证可执行文件..."
|
||||
if [ -f "meshray" ] || [ -f "meshray.exe" ]; then
|
||||
if [ "$OS" = "Darwin" ] || [ "$OS" = "Linux" ]; then
|
||||
chmod +x meshray
|
||||
fi
|
||||
|
||||
FILE_SIZE=$(ls -lh meshray* | awk '{print $5}')
|
||||
echo "[✓] 文件大小:$FILE_SIZE"
|
||||
echo "[✓] 验证通过"
|
||||
else
|
||||
echo "[错误] 可执行文件未生成!"
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo "========================================"
|
||||
echo " 构建完成!"
|
||||
echo ""
|
||||
echo " 输出文件:meshray$([ "$RSRC_NEEDED" = true ] && echo '.exe')"
|
||||
echo " 版本信息:2.0.0.0"
|
||||
if [ "$RSRC_NEEDED" = true ]; then
|
||||
echo " 包含:图标 + Manifest + 版本信息"
|
||||
fi
|
||||
echo "========================================"
|
||||
echo ""
|
||||
|
||||
# 显示版本信息(仅 Windows)
|
||||
if [ "$RSRC_NEEDED" = true ]; then
|
||||
echo "查看版本信息:"
|
||||
powershell -Command "(Get-Item meshray.exe).VersionInfo.FileDescription"
|
||||
echo ""
|
||||
fi
|
||||
|
||||
echo "按任意键退出..."
|
||||
read -n 1
|
||||
Reference in New Issue
Block a user