GO如何实现执行SET CGO_ENABLED=0 SET GOOS=linux SET GOARCH=amd64等命令并build成功?

letusgoAa · · 2804 次点击 · 开始浏览    置顶
这是一个创建于 的主题,其中的信息可能已经有所发展或是发生改变。

众所周知,在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

2804 次点击  
加入收藏 微博
6 回复  |  直到 2022-04-29 10:25:56
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传