https://github.com/therecipe/qt を用いて Go から Qt を使うための環境構築のメモ。
まずはじめに書いておかなくてはいけないのは、このライブラリは Qt の大部分をカバーしているらしく、それを Go から利用でき Mac/Windows/Linux でも動作するとてつもなく有益なライブラリであると言うこと・・ただ一つの弱点をのぞいて・・。
それは、ビルドに時間がかかりすぎると言うこと。
参考までに、2013 モデルの MacBook Air で超簡単なサンプルを実行(go run/go build)するのに 30 秒、Windows だと 2 分強(Core i7 4770k/MEM16GB)
いろいろ調べてみたけどこれはもうこう言う物らしい。
C++ だとインクリメントビルドがあるからクリーンビルドとかするとこのくらいかかるのかもしれないけど、通常だと 5 秒くらいだと思われ、Go の長所であるコンパイル速度がここまで跡形もなく消えて無くなっているのはほとんどの人には受け入れられないのではないかと個人的には思っている。
何か速くする方法があるのであれば教えて欲しい。コンパイル速度以外はあまりにも素晴らしいライブラリ/開発環境なので・・。
このコンパイル時間が受け入れられる場合に限って続きを読むことを推奨する。
Mac
https://github.com/therecipe/qt/wiki/Installation-on-macOS を参考にインストールを進めること。
ただし、Mac の場合以下の問題により GO111MODULE=on では動作しない。
undefined: NewQByteArrayFromPointer #1041
大人しく GO111MODULE=off で利用すること。
また、Windows の環境も同様だが Qt のバージョンは上記手順に書かれている物に合わせること。
この記事執筆時のバージョンは 5.13.0(https://download.qt.io/official_releases/qt/5.13/5.13.0/qt-opensource-mac-x64-5.13.0.dmg)
ただしこの記事では brew install で入れたので brew が使える人はこっちの方が簡単
brew install qt
次に環境変数を以下のように定義する
export PATH=/usr/local/opt/qt/bin:$PATH
export LDFLAGS="-L/usr/local/opt/qt/lib"
export CPPFLAGS="-I/usr/local/opt/qt/include"
export PKG_CONFIG_PATH="/usr/local/opt/qt/lib/pkgconfig"
export QT_HOMEBREW=true
以下のサンプルプログラムを準備する
package main
import (
"os"
"github.com/therecipe/qt/core"
"github.com/therecipe/qt/widgets"
)
func main() {
core.QCoreApplication_SetApplicationName("sample")
core.QCoreApplication_SetOrganizationName("sample")
core.QCoreApplication_SetAttribute(core.Qt__AA_EnableHighDpiScaling, true)
widgets.NewQApplication(len(os.Args), os.Args)
window := widgets.NewQMainWindow(nil, 0)
window.SetMinimumSize2(400, 300)
window.SetWindowTitle("Hello World")
window.Show()
widgets.QApplication_Exec()
}
ビルドする前に以下のコマンドを実行する
export GO111MODULE=off
xcode-select --install
go get -v github.com/therecipe/qt/cmd/...
$(go env GOPATH)/bin/qtsetup -test=false
以下のようにして main をビルドする
go build main.go
私の環境ではこのビルドに 30 秒かかるのがこのライブラリの懸念点だと認識している。
Windows
https://github.com/therecipe/qt/wiki/Installation-on-Windows を参考にインストールを進めること。
Mac の環境も同様だが Qt のバージョンは上記手順に書かれている物に合わせること。
この記事執筆時のバージョンは 5.13.0(https://download.qt.io/official_releases/qt/5.13/5.13.0/qt-opensource-windows-x86-5.13.0.exe)
インストール時にはメールアカウントが必要になる。
とりあえず試したいと言う人は quickmail を使うなりするといいかもしれない。
qt-opensource-windows-x86-5.13.0.exe を実行し、mingw(64-bit)と表示されているビルドとツール配下の2項目を追加でチェックしてインストールする。
次に環境変数を以下のように定義する
QT_DIR=C:\Qt\Qt5.13.0
QT_QMAKE_DIR=C:\Qt\Qt5.13.0\5.13.0\mingw73_64\bin
PATH に以下を追加
C:\Qt\Qt5.13.0\5.13.0\mingw73_64\bin
C:\Qt\Qt5.13.0\Tools\mingw730_64\bin
以下のサンプルプログラムを準備する
package main
import (
"os"
"github.com/therecipe/qt/core"
"github.com/therecipe/qt/widgets"
)
func main() {
core.QCoreApplication_SetApplicationName("sample")
core.QCoreApplication_SetOrganizationName("sample")
core.QCoreApplication_SetAttribute(core.Qt__AA_EnableHighDpiScaling, true)
widgets.NewQApplication(len(os.Args), os.Args)
window := widgets.NewQMainWindow(nil, 0)
window.SetMinimumSize2(400, 300)
window.SetWindowTitle("Hello World")
window.Show()
widgets.QApplication_Exec()
}
ビルドする前に以下のコマンドを実行する
set GO111MODULE=on
go mod init test
go get -v github.com/therecipe/qt
go install -v -tags=no_env github.com/therecipe/qt/cmd/...
go mod vendor
git clone https://github.com/therecipe/env_windows_amd64_513.git vendor/github.com/therecipe/env_windows_amd64_513
for /f %v in ('go env GOPATH') do %v\bin\qtsetup
以下のようにして main をビルドする
qtenv
go build main.go
qtenv により mingw g++ などへのパスが通り、それを用いてビルドを行う模様。
私の環境ではこのビルドに 2 分かかるのがこのライブラリの懸念点だと認識している。
この問題さえなければ積極的に使っていきたいのだが・・。
以上