feat(build): 为所有构建命令启用静态链接支持

- 新增 CGO_DISABLE 变量(CGO_ENABLED=0)
- 所有构建目标(build、build-prod、build-perf、build-pgo)均使用静态链接
- 跨平台构建(linux、darwin、windows)同样启用静态链接
- 更新 help 文案反映静态构建特性

静态链接确保二进制文件无外部依赖,便于容器化部署。

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
xfy 2026-04-09 14:54:05 +08:00
parent 83b2a35715
commit 8ecb48e246

View File

@ -10,6 +10,9 @@ GO_VERSION := $(shell go version | awk '{print $$3}')
BUILD_PLATFORM := $(shell go env GOOS)/$(shell go env GOARCH)
BUILD_DIR := bin
# 静态构建(禁用 CGO
CGO_DISABLE := CGO_ENABLED=0
# 生产构建标志(体积优化)
LDFLAGS := -ldflags "-s -w \
-X 'rua.plus/lolly/internal/app.Version=$(VERSION)' \
@ -33,36 +36,36 @@ MAIN_PATH := main.go
# 构建命令
# ============================================
# 本地构建
# 本地构建(静态链接)
build:
@echo "Building $(APP_NAME)..."
@echo "Building $(APP_NAME) (static)..."
@mkdir -p $(BUILD_DIR)
go build $(LDFLAGS) -o $(BUILD_DIR)/$(APP_NAME) $(MAIN_PATH)
$(CGO_DISABLE) go build $(LDFLAGS) -o $(BUILD_DIR)/$(APP_NAME) $(MAIN_PATH)
@echo "Built: $(BUILD_DIR)/$(APP_NAME)"
@echo "Version: $(VERSION) | Commit: $(GIT_COMMIT) | Platform: $(BUILD_PLATFORM)"
# 生产构建(体积优化
# 生产构建(体积优化,静态链接
build-prod:
@echo "Building $(APP_NAME) for production..."
@echo "Building $(APP_NAME) for production (static)..."
@mkdir -p $(BUILD_DIR)
go build $(LDFLAGS) -trimpath -o $(BUILD_DIR)/$(APP_NAME) $(MAIN_PATH)
$(CGO_DISABLE) go build $(LDFLAGS) -trimpath -o $(BUILD_DIR)/$(APP_NAME) $(MAIN_PATH)
@echo "Production build complete: $(BUILD_DIR)/$(APP_NAME)"
# 生产构建(最大运行时性能
# 生产构建(最大运行时性能,静态链接
build-perf:
@echo "Building $(APP_NAME) with max runtime performance..."
@echo "Building $(APP_NAME) with max runtime performance (static)..."
@mkdir -p $(BUILD_DIR)
go build $(LDFLAGS) $(PERF_GCFLAGS) $(PERF_ASMFLAGS) -trimpath \
$(CGO_DISABLE) go build $(LDFLAGS) $(PERF_GCFLAGS) $(PERF_ASMFLAGS) -trimpath \
-o $(BUILD_DIR)/$(APP_NAME) $(MAIN_PATH)
@echo "Performance build complete: $(BUILD_DIR)/$(APP_NAME)"
# PGO 构建(需先收集 profile
# PGO 构建(需先收集 profile,静态链接
PGO_PROFILE ?= default.pgo
build-pgo:
@echo "Building $(APP_NAME) with PGO optimization..."
@echo "Building $(APP_NAME) with PGO optimization (static)..."
@mkdir -p $(BUILD_DIR)
if [ -f $(PGO_PROFILE) ]; then \
go build $(LDFLAGS) $(PERF_GCFLAGS) $(PERF_ASMFLAGS) -trimpath \
$(CGO_DISABLE) go build $(LDFLAGS) $(PERF_GCFLAGS) $(PERF_ASMFLAGS) -trimpath \
-pgo=$(PGO_PROFILE) -o $(BUILD_DIR)/$(APP_NAME) $(MAIN_PATH); \
echo "PGO build complete using: $(PGO_PROFILE)"; \
else \
@ -99,24 +102,24 @@ pgo-collect:
@echo ""
@echo "Tip: Profile during real workload for best PGO results"
# 跨平台构建
# 跨平台构建(静态链接)
build-linux:
@echo "Building for Linux..."
@echo "Building for Linux (static)..."
@mkdir -p $(BUILD_DIR)
GOOS=linux GOARCH=amd64 go build $(LDFLAGS) -trimpath -o $(BUILD_DIR)/$(APP_NAME)-linux-amd64 $(MAIN_PATH)
$(CGO_DISABLE) GOOS=linux GOARCH=amd64 go build $(LDFLAGS) -trimpath -o $(BUILD_DIR)/$(APP_NAME)-linux-amd64 $(MAIN_PATH)
@echo "Built: $(BUILD_DIR)/$(APP_NAME)-linux-amd64"
build-darwin:
@echo "Building for macOS..."
@echo "Building for macOS (static)..."
@mkdir -p $(BUILD_DIR)
GOOS=darwin GOARCH=amd64 go build $(LDFLAGS) -trimpath -o $(BUILD_DIR)/$(APP_NAME)-darwin-amd64 $(MAIN_PATH)
GOOS=darwin GOARCH=arm64 go build $(LDFLAGS) -trimpath -o $(BUILD_DIR)/$(APP_NAME)-darwin-arm64 $(MAIN_PATH)
$(CGO_DISABLE) GOOS=darwin GOARCH=amd64 go build $(LDFLAGS) -trimpath -o $(BUILD_DIR)/$(APP_NAME)-darwin-amd64 $(MAIN_PATH)
$(CGO_DISABLE) GOOS=darwin GOARCH=arm64 go build $(LDFLAGS) -trimpath -o $(BUILD_DIR)/$(APP_NAME)-darwin-arm64 $(MAIN_PATH)
@echo "Built: $(BUILD_DIR)/$(APP_NAME)-darwin-{amd64,arm64}"
build-windows:
@echo "Building for Windows..."
@echo "Building for Windows (static)..."
@mkdir -p $(BUILD_DIR)
GOOS=windows GOARCH=amd64 go build $(LDFLAGS) -trimpath -o $(BUILD_DIR)/$(APP_NAME)-windows-amd64.exe $(MAIN_PATH)
$(CGO_DISABLE) GOOS=windows GOARCH=amd64 go build $(LDFLAGS) -trimpath -o $(BUILD_DIR)/$(APP_NAME)-windows-amd64.exe $(MAIN_PATH)
@echo "Built: $(BUILD_DIR)/$(APP_NAME)-windows-amd64.exe"
# 构建所有平台
@ -278,7 +281,7 @@ clean:
help:
@echo "$(APP_NAME) Makefile Commands"
@echo ""
@echo "Build:"
@echo "Build (static linked):"
@echo " make build - Build for current platform"
@echo " make build-prod - Production build (size optimized)"
@echo " make build-perf - Production build (max runtime performance)"