-
Notifications
You must be signed in to change notification settings - Fork 10
/
Copy pathcompiler.sh
executable file
·56 lines (46 loc) · 1.24 KB
/
compiler.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
#!/bin/bash
# 源代码路径
SRC_PATH="/path/to/main.go"
# 输出目录
OUT_DIR="/path/to/bin"
# 程序名
APP_NAME="tcping"
# 需要编译的目标平台和架构
PLATFORMS=(
"darwin/amd64"
"darwin/arm64"
"linux/386"
"linux/amd64"
"linux/arm"
"linux/arm64"
"linux/loong64"
"windows/386"
"windows/amd64"
"windows/arm"
"windows/arm64"
)
# 清理之前的编译产物
rm -rf $OUT_DIR
mkdir -p $OUT_DIR
# 编译并压缩每个平台
for PLATFORM in "${PLATFORMS[@]}"; do
# 获取平台的 GOOS 和 GOARCH
GOOS=$(echo $PLATFORM | cut -d'/' -f1)
GOARCH=$(echo $PLATFORM | cut -d'/' -f2)
# 设置输出文件路径
OUT_FILE="$OUT_DIR/$APP_NAME"
# 设置环境变量并编译
echo "编译 ${GOOS}/${GOARCH}..."
CGO_ENABLED=0 GOOS=$GOOS GOARCH=$GOARCH go build -trimpath -ldflags="-w -s" -o "$OUT_FILE" $SRC_PATH
# 判断是否是 Windows 平台,需要添加 .exe 扩展名
if [ "$GOOS" == "windows" ]; then
mv "$OUT_FILE" "$OUT_FILE.exe"
OUT_FILE="$OUT_FILE.exe"
fi
# 压缩成 .zip 文件
echo "压缩 ${OUT_FILE}..."
zip -j "$OUT_DIR/$APP_NAME-${GOOS}-${GOARCH}.zip" "$OUT_FILE"
# 清理中间文件
rm "$OUT_FILE"
done
echo "编译和压缩完成,所有文件已存储在 $OUT_DIR 目录下。"