WindowsXPのGHCでGtk2Hsを使ってみます
GUIに手を出してみます。とりあえずWindowsXP上のGHC 6.4.2でGtk2Hs 0.9.10を使ってみます。Gtk2HsっていうのはGtk2のHaskellバインディングです。
まずはインストール方法を説明します。とりあえず以下からGHC 6.4.2で使えるgtk2hs-0.9.10.exeとGtk2をGtk+/Win32 Development Environment 2.8.18-1をダウンロードしてインストールします。
またUPXを使わないとプログラムのサイズが大きくてやってられないのでこれもインストールしておきます。
次にお決まりのHello, worldプログラムとそのMakefileを示します。あ、このMakefileはCygwin上で動かしてます。
ファイル: hello.hs
import Graphics.UI.Gtk main :: IO () main = do initGUI window <- windowNew button <- buttonNew set window [windowTitle := "Hello", containerChild := button] set button [ buttonLabel := "Hello" ] onDestroy window mainQuit onClicked button mainQuit widgetShowAll window mainGUI
ファイル: Makefile
TARGET = hello HC = ghc HCFLAGS = -W -fno-warn-unused-matches --make HCFLAGS_REL = -optl-mwindows UPX = upx UPXFLAGS = --overlay=strip --strip-relocs=0 EXE = .exe all: $(TARGET)_d$(EXE) release: clean $(TARGET)$(EXE) $(TARGET)_d$(EXE): $(TARGET).hs $(HC) $(HCFLAGS) $< -o $@ $(TARGET)$(EXE): $(TARGET).hs $(HC) $(HCFLAGS) $(HCFLAGS_REL) $< -o $@ $(UPX) $(UPXFLAGS) $@ clean: rm -f $(TARGET)_d$(EXE) $(TARGET)$(EXE) *.o *.hi
以下、実行例です。とりあえずデバッグモジュールを作成します。デバッグモジュールは、hello_d.exeというファイルに生成されます。ダブルクリックしてプログラムを起動すると、コンソールウィンドウ(DOS窓みたいなの)もいっしょに表示されます。その場限りのデバッグプリントとかに使えます。また、このプログラムのファイルサイズが7Mbyte以上もあります。このプログラムをそのまま配布するのはちょっと厳しいでしょう。
$ make ghc -W -fno-warn-unused-matches --make hello.hs -o hello_d.exe Chasing modules from: hello.hs Compiling Main ( hello.hs, hello.o ) Linking ... $ ls -l hello_d.exe -rwxrwxrwx 1 s-tanaka なし 7055204 Aug 3 07:58 hello_d.exe rm -f hello_d.exe hello.exe *.o *.hi
次にリリースモジュールを作成します。こちらはデバッグモジュールと違ってコンソールウィンドウは表示されません(ghcの-optl-mwindowsを使ってます)。またUPXを使って圧縮をかけています。7Mbyte→0.5Mbyteになります(upxのupx --overlay=strip --strip-relocs=0がかなり効きます)。
$ make release ghc -W -fno-warn-unused-matches --make -optl-mwindows hello.hs -o hello.exe Chasing modules from: hello.hs Compiling Main ( hello.hs, hello.o ) Linking ... upx --overlay=strip --strip-relocs=0 hello.exe Ultimate Packer for eXecutables Copyright (C) 1996,1997,1998,1999,2000,2001,2002,2003,2004,2005,2006 UPX 2.01w Markus Oberhumer, Laszlo Molnar & John Reiser Jun 06th 2006 File size Ratio Format Name -------------------- ------ ----------- ----------- 7055204 -> 499200 7.08% win32/pe hello.exe Packed 1 file. $ ls -l hello.exe -rwxrwxrwx 1 s-tanaka なし 499200 Aug 3 07:58 hello.exe
参考: