概要
Go言語でWindowsのバイナリをビルドすると製品名やファイルバージョンなどがすべて空欄になってしまいます。
これらの値を設定してビルドする方法について記載します。
通常ビルド時
GoでWindowsのバイナリをビルドすると以下のようにexeのプロパティの詳細タブの値がすべて空欄となります。
値の設定方法
GoVersionInfo を利用することで値を設定できます。
はじめに、GoVersionInfoのパッケージをダウンロードします。
go get github.com/josephspurrier/goversioninfo/cmd/goversioninfo
GOPATH
にパッケージが配置されるので、パスを通しておきます。
set PATH="%GOPATH%\bin";%PATH%
Goのソースが配置されているフォルダに以下のファイルを配置します。
ファイル名は versioninfo.json
文字コードは UTF-8
にしておきます。
versioninfo.json
{
"FixedFileInfo": {
"FileVersion": {
"Major": 1,
"Minor": 0,
"Patch": 0,
"Build": 0
},
"ProductVersion": {
"Major": 1,
"Minor": 0,
"Patch": 0,
"Build": 0
},
"FileFlagsMask": "3f",
"FileFlags ": "00",
"FileOS": "040004",
"FileType": "01",
"FileSubType": "00"
},
"StringFileInfo": {
"Comments": "",
"CompanyName": "会社名",
"FileDescription": "ファイルの説明",
"FileVersion": "1.0.0.0",
"InternalName": "test",
"LegalCopyright": "Copyright (C) 2018 会社名",
"LegalTrademarks": "",
"OriginalFilename": "test.exe",
"PrivateBuild": "",
"ProductName": "製品名",
"ProductVersion": "1.0.0.0",
"SpecialBuild": ""
},
"VarFileInfo": {
"Translation": {
"LangID": "0411",
"CharsetID": "04B0"
}
},
"IconPath": "",
"ManifestPath": ""
}
Goのソースの先頭に以下の行を追加します。
test.go
//go:generate goversioninfo
以下のコマンドでビルドを行います。
set GOARCH=amd64
set GOOS=windows
go generate
go build -ldflags "-s -w" -i
ビルドに成功すると resource.syso
というファイルが生成され、バイナリには製品名やバージョンが埋め込まれます。
まだ試してはいませんが、Goのソースの先頭を以下のようにするとアイコンやマニフェストも埋め込むことができるようです。
詳しくは GoVersionInfo のマニュアルを参照してみてください。
//go:generate goversioninfo -icon=icon.ico -manifest=goversioninfo.exe.manifest