Autotoolsを使ってWindows用バイナリーをビルドする方法を紹介しましたが、ここで紹介するのはCMakeを使う方法です。CMakeでクロスコンパイルする方法はcmake-toolchains(7)に説明があります。CMakeはクロスコンパイル用にCMAKE_TOOLCHAIN_FILEという変数を用意しています。前述のドキュメントはこの変数を使う方法を説明しています。ファイルを作るのは少し面倒なので、ここではコマンドラインオプションでWindows用バイナリーをビルドする方法を紹介します。GNU/Linux上でWindows用バイナリをビルドするためにはクロスコンパイルする必要があります。そのためにMinGW-w64を使います。MinGW-w64はGCCでWindows用バイナリをビルドするために必要なヘッダーファイルやライブラリなど一式を提供します。cmakeパッケージとmingw-w64パッケージをインストールします。wineパッケージは動作確認用です。wine準備はこれで完了です。ビルドここではCMakeでのビルドに対応しているGroongaをクロスコンパイルします。ソースコードをダウンロードして展開します。groonga-6.1.1CMakeを使うときはソースコードのあるディレクトリーではなく別のディレクトリーをビルドディレクトリーにすることが多いですが、ここでは説明を簡単にするためにソースコードのあるディレクトリーを使います。Autotoolsのときは--host=x86_64-w64-mingw32を指定するだけであとはいい感じに設定してくれますが、CMakeは次のようにいくつかのパラメーターを指定します。この中でクロスコンパイルに直接関係ないパラメーターはCMAKE_INSTALL_PREFIXだけです。これはインストール先を変更するために指定しているだけです。-DCMAKE_RC_COMPILER=x86_64-w64-mingw32-windres各パラーメーターについて説明します。pkg-configが.pcファイルを検索するときに使うパス。GNU/Linux)の.pcファイルを一切検索しないようにする。Windowsを指定するとCMakeに組み込まれているWindows用のビルドの設定を使ってくれる。(/usr/share/cmake-3.7/Modules/Platform/Windows.cmakeなどを使ってくれる。)CMAKE_SYSTEM_NAMEを設定するときはあわせてCMAKE_SYSTEM_VERSIONも設定するべきだが、MinGW-w64でクロスコンパイルするときはCMAKE_SYSTEM_VERSIONを使っていなそうなので省略している。32bitのバイナリーをビルドするか64bitのバイナリーをビルドするかを指定する。32bitならx86で64bitならx64になる。ここではx64を指定しているので64bitのバイナリーをビルドする。MinGW-w64が提供するgccのコマンド名を指定する。PATHが通っていない場合はフルパスで指定する。MinGW-w64が提供するg++のコマンド名を指定する。PATHが通っていない場合はフルパスで指定する。MinGW-w64が提供するwindresのコマンド名を指定する。PATHが通っていない場合はフルパスで指定する。.rcファイルを使わない場合は指定しなくても大丈夫。CMAKE_FIND_ROOT_PATH_MODE_PROGRAMなども指定した方が間違ってビルド環境にあるプログラムやライブラリーなどを見つけてしまわなくてよいのですが、Groongaのようにpkg-configを使っている場合は設定しなくても大丈夫です。あとはmakeでビルドできます。installするとCMAKE_INSTALL_PREFIXで指定したディレクトリー以下にインストールされます。GNU/Linux上でインストールしたバイナリーで動作確認できます。Handlingの略)がないとバイナリーを実行できません。動作確認する前に${CMAKE_INSTALL_PREFIX}/bin/以下にこれらのDLLをコピーします。./これで動作確認できます。<>CPackを使えばビルドしたバイナリーを含むアーカイブを作成することができます。PGroongaはCPackを使ってバイナリー入りアーカイブを作成しています。CMakeLists.txtにCPackの設定がある場合は次のようにすればアーカイブを作成できます。GNU/Linux上でCMakeを使ってWindows用のバイナリーをビルドする方法を紹介しました。CMakeを使っているプロダクトをクロスコンパイルしたいときは参考にしてください。4.0とGFDLのデュアルライセンスで自由に利用できます。クリアコードはプログラミングが楽しいソフトウェア開発者を1名募集しています。クリアコードは「クリアコードをいい感じにする人」を1名募集しています。クリアコードはフリーソフトウェア開発で培った技術力を提供しています。Thunderbird)とRubyとGroonga(全文検索)に関連した開発を得意としています。