Go语言交叉编译工具gox

基本介绍

交叉编译是为了在不一样平台编译出其余平台的程序,好比在Linux编译出Windows程序,在Windows能编译出Linux程序,32位系统下编译出64位程序,今天介绍的gox就是其中一款交叉编译工具。linux

配置环境

首先配置好Go语言的环境变量,并在~/.bash_profile中设置,简单说明一下为何要添加至该文件,首先如下代码在终端执行完成后只对当前会话有效,关闭终端变量就失效了,而.bash_profile文件在用户每次登陆时都会执行一次,把环境变量设置到该文件中,每次登陆都会初始化环境变量。固然,放在~/.bashrc中也是能够的,它不只会在登陆时执行,还会在每次打开终端时执行。android

export GOPATH=${HOME}/go
export GOROOT=/usr/local/go
export GOBIN=${GOPATH}/bin
export PATH=${PATH}:${GOBIN}
复制代码

GOROOT与GOPATH要根据自身状况设置,不要盲目跟从,设置完成后若要该文件当即生效,能够执行source命令。git

source ~/.bash_profile
复制代码

若是你的终端装了zsh,可能从新打开终端后依然会失效,那么能够在~/.zshrc文件的最后一行追加上source指令。github

source ~/.bash_profile
复制代码

gox的安装

在终端执行如下指令进行安装。windows

go get github.com/mitchellh/gox
复制代码

安装结束后,执行gox -h,若是有展现帮助信息,表明安装成功。bash

➜  ~ gox -h
Usage: gox [options] [packages]

  Gox cross-compiles Go applications in parallel.

  If no specific operating systems or architectures are specified, Gox
  will build for all pairs supported by your version of Go.
  ......
复制代码

gox的使用

按照惯例,咱们先祭出hello,world的演示代码。markdown

package main

import "fmt"

func main() {
	fmt.Print("hello,world")
}
复制代码

此时进入项目中的工做目录($GOPATH/src/[你的项目名]),直接执行gox命令,会生成多达21个不一样平台的可执行文件,横跨linux、windows、freebsd、darwin等系统。架构

➜  hello gox
Number of parallel builds: 3

-->     linux/amd64: hello
-->   openbsd/amd64: hello
-->      darwin/386: hello
-->    linux/mipsle: hello
-->     windows/386: hello
-->   windows/amd64: hello
-->    darwin/amd64: hello
-->       linux/386: hello
-->     linux/s390x: hello
-->      netbsd/386: hello
-->       linux/arm: hello
-->     freebsd/386: hello
-->    netbsd/amd64: hello
-->     freebsd/arm: hello
-->   freebsd/amd64: hello
-->     openbsd/386: hello
-->    linux/mips64: hello
-->      linux/mips: hello
-->  linux/mips64le: hello
-->      netbsd/arm: hello
复制代码

但我并不想一次生成全部平台的程序,这时就须要gox的参数进行指定,以下所示,os参数指定要生成的系统名称,arch指定CPU的架构。app

gox -os "windows" -arch amd64
复制代码

其实它所支持的并不止21款,这些只是默认生成的,下面是gox对各类系统的定义,感兴趣的同窗能够自行了解。工具

Platforms_1_0 = []Platform{
		{"darwin", "386", true},
		{"darwin", "amd64", true},
		{"linux", "386", true},
		{"linux", "amd64", true},
		{"linux", "arm", true},
		{"freebsd", "386", true},
		{"freebsd", "amd64", true},
		{"openbsd", "386", true},
		{"openbsd", "amd64", true},
		{"windows", "386", true},
		{"windows", "amd64", true},
	}

	Platforms_1_1 = append(Platforms_1_0, []Platform{
		{"freebsd", "arm", true},
		{"netbsd", "386", true},
		{"netbsd", "amd64", true},
		{"netbsd", "arm", true},
		{"plan9", "386", false},
	}...)

	Platforms_1_3 = append(Platforms_1_1, []Platform{
		{"dragonfly", "386", false},
		{"dragonfly", "amd64", false},
		{"nacl", "amd64", false},
		{"nacl", "amd64p32", false},
		{"nacl", "arm", false},
		{"solaris", "amd64", false},
	}...)

	Platforms_1_4 = append(Platforms_1_3, []Platform{
		{"android", "arm", false},
		{"plan9", "amd64", false},
	}...)

	Platforms_1_5 = append(Platforms_1_4, []Platform{
		{"darwin", "arm", false},
		{"darwin", "arm64", false},
		{"linux", "arm64", false},
		{"linux", "ppc64", false},
		{"linux", "ppc64le", false},
	}...)

	Platforms_1_6 = append(Platforms_1_5, []Platform{
		{"android", "386", false},
		{"linux", "mips64", false},
		{"linux", "mips64le", false},
	}...)

	Platforms_1_7 = append(Platforms_1_5, []Platform{
		// While not fully supported s390x is generally useful
		{"linux", "s390x", true},
		{"plan9", "arm", false},
		// Add the 1.6 Platforms, but reflect full support for mips64 and mips64le
		{"android", "386", false},
		{"linux", "mips64", true},
		{"linux", "mips64le", true},
	}...)

	Platforms_1_8 = append(Platforms_1_7, []Platform{
		{"linux", "mips", true},
		{"linux", "mipsle", true},
	}...)
复制代码

除了刚才的命令外还有另外一种生成方式,用斜杠的方式将系统与架构合并批量生成。

gox -osarch "windows/amd64 linux/amd64"
复制代码

赶忙把你生成的程序发给小伙伴执行试试吧,以上就是本文所有内容,感谢阅读。