CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build main.go
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build main.go
CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build main.go
GOOS:目标平台的操作系统(darwin、freebsd、linux、windows)
GOARCH:目标平台的体系架构(386、amd64、arm)
交叉编译不支持 CGO 所以要禁用它
Makefile示例
如果经常需要编译多个平台的操作,可以将命令整合到Makefile中,go build -o 指定输出路径。
# 编译到 Linux
.PHONY: build-linux
build-linux:
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o ./build/main-linux ./main.go
# 编译到 macOS
.PHONY: build-darwin
build-darwin:
CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build -o ./build/main-darwin ./main.go
# 编译到 windows
.PHONY: build-windows
build-windows:
CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build -o ./build/main-windows.exe ./main.go
# 编译到 全部平台
.PHONY: build-all
build-all:
make clean
mkdir -p ./build
make build-linux
make build-darwin
make build-windows
.PHONY: clean
clean:
rm -rf ./build
Makefile直接生成所有平台
make build-all
Makefile生成linux平台
make build-linux
Makefile命令注意事项
make: Nothing to be done这句一般是提示你已经编译好了,而且没有对代码进行任何改动。
Makefile(注意大小写哦,M必须大写,其余必须小写)文件格式不规范,在all:或default:后面另起的一行命令中,行首没有TAB键的空格,或者有空格,但是是Space键的“ ”,不是Tab键的“ ”,这也是不行的!
解决方法,修改所有相关行使用Tab空格
demo地址:待补充
参考文章:Golang:交叉编译到Linux、macOS、windows并运行