LoginSignup
14
13

More than 5 years have passed since last update.

Goで任意のbuild tagsをつけてビルドファイルを切り替える

Posted at

背景

Goは環境固有の処理を書ける仕組みがあり、OSやCPUアーキテクチャによってビルドするファイルを選択できます。そしてbuild tagsをビルドパラメータに与えることで、任意の条件でビルドするファイルを切り替えることができます。この方法はcgoのincludeなど、ビルド時に解決したい依存関係があるときに有用です。

ビルドスクリプト

build tagはgo build-tagsオプションで渡すことができます。2つのビルドで異なるバイナリを吐くようにGoを記述します。

go build -tags foo      # fooサポート環境
go build                # foo非サポート環境

この方法は、例えばファイル/usr/include/foo.hの有無でビルドを切り替えることができます。

if [ -f /usr/include/foo.h ]; then
  go build -tags foo
else
  go build
fi

build tagsを使ったビルドの切り分け

Goのコードの先頭にビルドタグ// +buildをつけるとこで、そのファイルをビルド対象かどうかを指定できます。fooが与えられた時とそうでない時のファイルを用意し、それぞれのファイルの先頭にビルド条件を記述します。

run_foo.go
// +build foo

package main

import "fmt"

func run() {
    fmt.Println("Foo supported")
}
run_nofoo.go
// +build !foo

package main

import "fmt"

func run() {
    fmt.Println("Foo not supported")
}

そしてmainからrun()を呼び出すと、ビルドされたどちらかのrun()を呼び出します。

package main

func main() {
    run()
}
14
13
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
13