1. 首页
  2. 主题
  3. Go问与答

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

letusgoAa · · 3269 次点击
众所周知,在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可执行文件 求靓仔大佬解惑
SET CGO_ENABLED=0& SET GOOS=linux& SET GOARCH=amd64& go build main.go
#5
更多评论
```bash ## 这样 go build -o main main.go ```
#1

用户登录

没有账号?注册

今日阅读排行

    加载中

一周阅读排行

    加载中