# 强制指定 Go 版本(需与主程序编译环境一致) REQUIRED_GO_VERSION := 1.23.6 # 目标平台配置(根据运行环境调整,如 arm64) TARGET_GOOS := linux TARGET_GOARCH := amd64 # 交叉编译工具链(Mac 编译 Linux amd64 必需) TARGET_CC := x86_64-linux-musl-gcc build-linux1: @echo "===== 开始编译 Linux 插件 =====" @echo "要求 Go 版本: $(REQUIRED_GO_VERSION)" @echo "目标平台: $(TARGET_GOOS)/$(TARGET_GOARCH)" # 1. 检查 Go 版本 @go version | grep -q $(REQUIRED_GO_VERSION) || ( \ echo "错误:需要 Go $(REQUIRED_GO_VERSION),当前版本:$(shell go version)"; \ exit 1 \ ) # 2. 检查插件目录 @[ -d "plugins/${name}" ] || ( \ echo "错误:插件目录 plugins/${name} 不存在"; \ exit 1 \ ) # 3. 核心:所有命令写在同一行,确保环境变量作用域生效 # 注意:&& 连接,且环境变量紧跟 cd 后,与 go build 同进程 cd plugins/${name} && \ CGO_ENABLED=1 \ CC=$(TARGET_CC) \ GOOS=$(TARGET_GOOS) \ GOARCH=$(TARGET_GOARCH) \ GOPROXY=https://goproxy.cn,direct \ go build -buildmode=plugin -trimpath -o ../../pkg/linux/${name}.so . # 4. 验证编译结果 @echo "===== 编译完成 =====" @echo "插件路径: pkg/linux/${name}.so" @echo "插件格式检测:" @file pkg/linux/${name}.so build-linux: cd plugins; \ export GOOS=linux; \ export GOARCH=amd64; \ export CGO_ENABLED=0; \ export GOPROXY=https://goproxy.cn,direct; \ cd ${name} && go build -o ../../pkg/linux/${name}.so . build-mac: cd plugins; \ export GOOS=darwin; \ export GO111MODULE=on; \ export CGO_ENABLED=0; \ export GOPROXY=https://goproxy.cn,direct; \ cd ${name} && go build -o ../../pkg/mac/${name}.so . build-win: cd plugins; \ export GOOS=windows; \ export GOARCH=amd64; \ export GO111MODULE=on; \ export CGO_ENABLED=0; \ export GOPROXY=https://goproxy.cn,direct; \ cd ${name} && go build -o ../../pkg/win/${name}.so . .PHONY: zltx_v1 zltx_v1: make build-linux name=zltx_v1 && \ make build-mac name=zltx_v1 && \ make build-win name=zltx_v1 .PHONY: zltx_card_v1 zltx_card_v1: make build-linux name=zltx_card_v1 && \ make build-mac name=zltx_card_v1 && \ make build-win name=zltx_card_v1 .PHONY: zltx_v2 zltx_v2: make build-linux name=zltx_v2 && \ make build-mac name=zltx_v2 && \ make build-win name=zltx_v2 .PHONY: alipay_cpn alipay_cpn: make build-linux name=alipay_cpn && \ make build-mac name=alipay_cpn && \ make build-win name=alipay_cpn .PHONY: alipay_redpack alipay_redpack: make build-linux name=alipay_redpack && \ make build-mac name=alipay_redpack && \ make build-win name=alipay_redpack .PHONY: wechat_cpn wechat_cpn: make build-linux name=wechat_cpn && \ make build-mac name=wechat_cpn && \ make build-win name=wechat_cpn .PHONY: wechat_redpack wechat_redpack: make build-linux name=wechat_redpack && \ make build-mac name=wechat_redpack && \ make build-win name=wechat_redpack .PHONY: wechat_redpack_v2 wechat_redpack_v2: make build-linux name=wechat_redpack_v2 && \ make build-mac name=wechat_redpack_v2 && \ make build-win name=wechat_redpack_v2 .PHONY: union_pay_cpn union_pay_cpn: make build-linux name=union_pay_cpn && \ make build-mac name=union_pay_cpn && \ make build-win name=union_pay_cpn .PHONY: union_pay_redpack union_pay_redpack: make build-linux name=union_pay_redpack && \ make build-mac name=union_pay_redpack && \ make build-win name=union_pay_redpack .PHONY: qixing_alipay_redpack qixing_alipay_redpack: make build-linux name=qixing_alipay_redpack && \ make build-mac name=qixing_alipay_redpack && \ make build-win name=qixing_alipay_redpack .PHONY: qixing_wechat_redpack qixing_wechat_redpack: make build-linux name=qixing_wechat_redpack && \ make build-mac name=qixing_wechat_redpack && \ make build-win name=qixing_wechat_redpack .PHONY: all all: zltx_v1 zltx_card_v1 zltx_v2 alipay_cpn alipay_redpack wechat_cpn wechat_redpack wechat_redpack_v2