Windows版(MSYS/Cygwin版)moshのビルド方法
Windows版のmoshはCMakeの他にMSYSやCygwinでもビルドすることができる。
非常にややこしいが、Windows上で動作するmoshにはN種類ある。
- Win32で動作するMinGW+CMake版
- Win32で動作するVisualStudio+CMake版
- Win64で動作するVisualStudio+CMake版
- Win32で動作するMinGW+autotools版
- Win32で動作するCygwin+autotools版
普段Cygwinを使っているなら、Cygwin+autotools版が多分一番安定している。インストール方法はLinux同様なので省略。。Cygwin上では、Moshの備える殆どの機能が使える。
問題はMinGW版とVisualStudio版で、それぞれで仕様が微妙に異なる。。一般に、MinGW版の方が動作が高速で機能が多く、VisualStudio版の方がビルドが高速で開発しやすい。個人的には、仕事でVisualStudio上のWin32/64版を使っていて、VisualStudio版の方がMinGW版よりも安定している可能性が高い。
VisualStudioでのビルド方法は既に書いた( http://d.hatena.ne.jp/mjt/20101108/p1 )ので、以下はMinGW版のビルド方法。
MSYS or Cygwin ?
個人的には、"Cygwin上でMinGWコンパイラを使用してビルド"を推奨。MSYSはCygwinの縮小版なので、特にHDD容量に余裕が無いといった理由が無い限りはCygwinの方が好ましい。
Cygwinで開発環境を揃えるには、
- mingw64-i686-binutils
- mingw64-i686-gcc-core
- mingw64-i686-g++
- mingw64-i686-headers
- mingw64-i686-runtime
- make
の各パッケージを導入する。(MinGW64という名前になっているが、このコンパイラは32bitバイナリを出力する。。moshのBoehmGCはまだMinGW64をサポートしていないので、MinGWを使ってwin64バイナリを出力することはできない)
onigurumaとGMPのインストール
今回は~/moshprefixに各種ライブラリをインストールすることにする。
onigurumaとGMPは以下のように
./configure --host=i686-w64-mingw32 --prefix=$HOME/moshprefix --disable-shared
configureして普通にmake && make installでOK。
host=i686-w64-mingw32は、i686-w64-mingw32-で始まる名前のgccやldを使うという指示。
disable-sharedはDLLではなく静的リンクライブラリを使用する指示。基本的には不要だがCygwin上で一度onigurumaやGMPをインストールしている時はこれが無いと失敗することがある。(Cygwin版のライブラリとMinGW版のライブラリの区別が付かないため)
moshのビルド
もし、onig-configコマンドが有るなら、それを一旦削除する必要がある。which onig-configコマンドで探し、適当なところにmvする。
moshのconfigureもコツが必要で、
CFLAGS="-DGC_NOT_DLL -L$HOME/moshprefix/lib -I$HOME/moshprefix/include" \ CXXFLAGS="$CFLAGS" ./configure --host=i686-w64-mingw32 \ --prefix=$HOME/moshprefix --disable-profiler
- CFLAGSには-DGC_NOT_DLL、-Lと-Iを含める
- CXXFLAGSもCFLAGSと同様に設定する
- configureのオプションには先と同様の--hostと--disable-profilerを含める
ちなみにCygwinでconfigureした場合はmake checkやmake testは機能しない。MinGWビルドのmoshはCygwin形式のpathを解釈できないため。