分享
GO如何实现执行SET CGO_ENABLED=0 SET GOOS=linux SET GOARCH=amd64等命令并build成功?
letusgoAa · · 3259 次点击 · 开始浏览 置顶这是一个创建于 的主题,其中的信息可能已经有所发展或是发生改变。
众所周知,在windows环境下编译linux上可执行程序的命令如下
SET CGO_ENABLED=0
SET GOOS=linux
SET GOARCH=amd64
go build main.go
自已在windows上写的玩意有时候老是想放到不同环境上跑,每次编译就需要执行4条命令,很麻烦
于是简单弄了个build_linux.bat
set file=%1
if ""%1""=="""" set file=main.go
SET CGO_ENABLED=0
SET GOOS=linux
SET GOARCH=amd64
go build %file%
然后想用go也实现这个玩意
package main
import (
"flag"
"fmt"
"os"
"os/exec"
)
func main() {
initFlag()
buildFile()
}
func buildFile() {
fmt.Println("*******")
cmd(" CGO_ENABLED=0")
cmd(" GOOS=" + GOOS)
cmd(" GOARCH=" + GOARCH)
cmd := exec.Command("go", "build", File)
cmd.Env = os.Environ()
fmt.Println(cmd)
err := cmd.Run()
if err != nil {
fmt.Println("***err:", err)
return
}
}
func cmd(arg string) {
// 怎么设置go env并生效?
cmd := exec.Command("go", "env", arg)
fmt.Println(cmd)
err := cmd.Run()
if err != nil {
fmt.Println("***err:", err)
return
}
}
var (
GOOS string
GOARCH string
File string
)
func initFlag() {
flag.StringVar(&GOOS, "o", "linux", "目标平台的操作系统(darwin、freebsd、linux、windows)")
flag.StringVar(&GOARCH, "a", "amd64", "目标平台的体系架构(386、amd64、arm)")
flag.StringVar(&File, "f", "main.go", "需要编译的文件")
flag.Parse()
}
然而上面的go demo只生效了 go build main.go 这条命令,并生成 main.exe文件,而不是理想上的linux可执行文件
求靓仔大佬解惑
有疑问加站长微信联系(非本文作者)
入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889
关注微信3259 次点击
添加一条新回复
(您需要 后才能回复 没有账号 ?)
- 请尽量让自己的回复能够对别人有帮助
- 支持 Markdown 格式, **粗体**、~~删除线~~、
`单行代码` - 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
- 图片支持拖拽、截图粘贴等方式上传