share facebook facebook2 twitter menu hatena pocket slack

2015.11.16 MON

Goxによるコンパイルの紹介

古渡 晋也

WRITTEN BY古渡 晋也

はじめに

こんにちは。インフラエンジニアレベル1のf_prgです。
Goxというクロスコンパイルするパッケージがあるので紹介したいと思います。
go言語の管理ツールのgom(Go Manager)を使うの記事で扱っておりましたので、内容はほぼ同じようになります。

Gomfileを作成します

[f_prg@gom] $ gom gen gomfile
[f_prg@gom] $ ls
Gomfile
[f_prg@gom] $ vim Gomfile
[f_prg@gom] $ cat Gomfile
gom "github.com/mitchellh/gox"

パッケージをインストールします

[f_prg@gom] $ gom install
downloading github.com/mitchellh/gox
[f_prg@gom] $ ls
Gomfile _vendor

パッケージを使って、ビルドします

goxを使ってビルドをすると各種プラットフォームの実行ファイルが生成されます。
windowsのexeも作られます。

[f_prg@gom] $ gom exec gox -build-toolchain
The toolchain build can't be parallelized because compiling a single
Go source directory can only be done for one platform at a time. Therefore,
the toolchain for each platform will be built one at a time.
--> Toolchain: darwin/386
--> Toolchain: darwin/amd64
--> Toolchain: linux/386
--> Toolchain: linux/amd64
--> Toolchain: linux/arm
--> Toolchain: freebsd/386
--> Toolchain: freebsd/amd64
--> Toolchain: openbsd/386
--> Toolchain: openbsd/amd64
--> Toolchain: windows/386
--> Toolchain: windows/amd64
--> Toolchain: freebsd/arm
--> Toolchain: netbsd/386
--> Toolchain: netbsd/amd64
--> Toolchain: netbsd/arm
--> Toolchain: plan9/386
[f_prg@gom] $ gom exec gox
Number of parallel builds: 4
-->      darwin/386: _/Users/f_prg/Documents/dev/gom
-->    darwin/amd64: _/Users/f_prg/Documents/dev/gom
-->       linux/386: _/Users/f_prg/Documents/dev/gom
-->     linux/amd64: _/Users/f_prg/Documents/dev/gom
-->       linux/arm: _/Users/f_prg/Documents/dev/gom
-->     freebsd/386: _/Users/f_prg/Documents/dev/gom
-->   freebsd/amd64: _/Users/f_prg/Documents/dev/gom
-->     openbsd/386: _/Users/f_prg/Documents/dev/gom
-->   openbsd/amd64: _/Users/f_prg/Documents/dev/gom
-->     windows/386: _/Users/f_prg/Documents/dev/gom
-->   windows/amd64: _/Users/f_prg/Documents/dev/gom
-->     freebsd/arm: _/Users/f_prg/Documents/dev/gom
-->      netbsd/386: _/Users/f_prg/Documents/dev/gom
-->    netbsd/amd64: _/Users/f_prg/Documents/dev/gom
-->      netbsd/arm: _/Users/f_prg/Documents/dev/gom
-->       plan9/386: _/Users/f_prg/Documents/dev/gom
[f_prg@gom] $ ls
Gomfile                 gom_linux_386           gom_openbsd_amd64
_vendor                 gom_linux_amd64         gom_plan9_386
gom_darwin_386          gom_linux_arm           gom_windows_386.exe
gom_darwin_amd64        gom_netbsd_386          gom_windows_amd64.exe
gom_freebsd_386         gom_netbsd_amd64        main.go
gom_freebsd_amd64       gom_netbsd_arm
gom_freebsd_arm         gom_openbsd_386

goxで生成された実行ファイルを実行してみます

[f_prg@gom] $ ./gom_darwin_amd64
Hello, Gom

まとめ

GomとGoxを組み合わせると
パッケージ管理とクロスプラットフォームの構築が容易になりそうです。

補足、おまけ

windowsのexeは、検証しておりません。

参考資料・リンク

https://github.com/mitchellh/gox

元記事はこちら

Goxによるコンパイルの紹介

古渡 晋也

古渡 晋也

縁があって、cloudpackにジョインしました。 JAWS-UG さいたま支部コアメンバーとしても活動しております。 cloudpackにてインフラ設計・構築・運用をしております。 HadoopやMongoDBなどいろいろ経験しております。 あと、開発もできるエンジニアです。 開発可能な言語はC, C++, C#, アセンブラ, PHP, Ruby, JavaScript, Java, Objective-Cです。