エンジニアはこわくない

好きなように書く

golangでクロスコンパイルするならgoxライブラリを使うと便利!


スポンサーリンク

f:id:tsujitaku50:20170417225915p:plain

こんにちは、つじたく(@Tsuji_Taku50)です。

golangはクロスコンパイルできることが魅力の1つですが、

いかんせんコマンドが長くなる&複雑になりがちです。

そこで今回はgolangでクロスコンパイルを簡単にしてくれるライブラリを見つけたので、紹介します。

リポジトリ

下記が今回紹介するライブラリのリポジトリです。

github.com

README.mdに諸々の情報が記載されていますが、1つ1つ見ていきましょう。

インストール方法

% go get github.com/mitchellh/gox

インストールできたか確認するために下記のヘルプコマンドを試してみましょう。

% 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.

Options:

  -arch=""            Space-separated list of architectures to build for
  -build-toolchain    Build cross-compilation toolchain
  -cgo                Sets CGO_ENABLED=1, requires proper C toolchain (advanced)
  -gcflags=""         Additional '-gcflags' value to pass to go build
  -ldflags=""         Additional '-ldflags' value to pass to go build
  -tags=""            Additional '-tags' value to pass to go build
  -os=""              Space-separated list of operating systems to build for
  -osarch=""          Space-separated list of os/arch pairs to build for
  -osarch-list        List supported os/arch pairs for your Go version
  -output="foo"       Output path template. See below for more info
  -parallel=-1        Amount of parallelism, defaults to number of CPUs
  -gocmd="go"         Build command, defaults to Go
  -rebuild            Force rebuilding of package that were up to date
  -verbose            Verbose mode
・・・

と出力されれば、インストールに成功しています。

通常のクロスコンパイル

例えばlinux/amd64の環境用にビルドしようとすると

% GOOS=linux GOARCH=amd64 go build main.go

またwindows/amd64の環境用にビルドしようとすると

% GOOS=windows GOARCH=amd64 go build main.go

というコマンドになります。

上記のようなコマンドを全部覚えることが可能な人はそれでも良いのですが、毎回毎回ビルド方法を調べて思い出してetc・・・

となると面倒くさいです。

そこでgoxライブラリを使用します。

goxを使用したクロスコンパイル

  • goxライブラリが対応している全ての環境用にビルドしたい場合
% gox ./...


  • 任意の環境用にビルドしたい場合 (下記はlinux用にビルドしています)
% gox -os="linux" ./...


  • 任意の環境用(複数)にビルドしたい場合 (下記はlinuxwindows用にビルドしています)
% gox --osarch "linux/amd64 windows/amd64" ./...

このようなに環境変数を定義しなくても簡単にコンパイルしてくれます。

一度のビルドで複数コンパイルしてくれるもの便利ですね。

まとめ

golangの長所でもあるクロスコンパイルを簡単に実行できるのは、便利ですね。

ただ同時に複数のコンパイルをするので、多少の時間はかかります!

といっても5分かからないほどですが。

おわり!!