2. MSYS2

WindowsでHaskell使う上で、何かと出てくるのでメモ





MSYS2とMinGW-w64の関係


自分も当初混乱しましたが、
  • MSYS2はPOSIXシェル環境を提供するもの
  • MinGW-w64はWindows用のGNU開発環境を提供するもの
と全然別物です。実際、MinGW-w64単独での導入も可能です。その場合は、普通のWindowsアプリケーションと同様に、コマンドプロンプトからの利用が可能です。
ただ、実際にはMSYS2とセットでMinGW-w64を利用することが多いのは、パッケージのインストールにMSYS2のパッケージ管理(pacman)を利用するのが便利だからです。


MSYS2をインストールすると、(64bitの場合)下記の3つのシェルがインストールされます。
  • MSYS2 Shell
  • MinGW-w64 Win32 Shell
  • MinGW-w64 Win64 Shell
これらの違いはパスの設定です。MSYS2 Shellを基本として、MinGW-w64 Win32 Shellはそれに/mingw32/binが追加されており、MinGW-w64 Win64 Shellは/mingw64/binが追加されています。
パッケージのインストールや更新等は、どのシェルで実行しても構いません。ただ、そのパッケージがインストールされるディレクトリによって、実行可能なシェルとそうでないシェルに分かれます。
例えば、パッケージmingw-w64-x86_64-gccはインストールすると/mingw64/binにインストールされます。そのため、MSYS2 Shellでインストールを実施しても、実行可能なのはパスが設定されているMinGW-w64 Win64 Shellからのみ、ということになります。




インストール


公式サイトからインストーラをダウンロードし、実行します。

パッケージの場所は下記の通りです。
32-bit版
64-bit版

インストールが完了すると、ダイアログで「MSYS2 64bit を実行中」というチェックボックスが現れますが多分「実行する」の誤訳かと。チェックONのまま完了すればMSYS2 Shellが起動されます。
通常は引き続きMSYS2 Shellで環境の更新を実施するので、ONのまま完了します。




パッケージの更新


インストーラのリリース後に更新された各種パッケージを最新にしておきます。
リリースが最近なら既に最新なので、下記手順を踏んでも、更新されること無く終了します。


(1回目の更新)MSYS2 Shellを再起動後、コマンドpacman -Syuを実行します。
これは1回目の更新で、後でもう一度実施する必要があります。
完了してもプロンプトに復帰しないので、ウィンドウを閉じて終了させます。
$ pacman -Syu

...

警告: terminate MSYS2 without returning to shell and check for updates again
警告: for example close your terminal window instead of calling exit
(完了)



(2回目の更新)MSYS2 Shellを再起動後、コマンドpacman -Syuを実行します。
$ pacman -Syu





MSYS2以外からのパッケージの利用


pacmanでインストールしたパッケージはWindowsの実行形式なので、MSYS2 Shell以外からでも実行可能です。
但し、インストール先をWindowsの環境変数PATHに設定してしまうと、同じDLLを利用する、MSYS2以外でインストールしたアプリケーション(Git for WindowsやGIMP for Windows等)が誤動作を起こす可能性があります。

この辺の不安を無くすために、コマンドsetlocalを用いたバッチファイルを組んで利用するのをオススメします。

Win64の場合

@echo off
setlocal

set MSYS2_HOME=C:\msys64
set PATH=%MSYS2_HOME%\mingw64\bin;%MSYS2_HOME%\usr\local\bin;%MSYS2_HOME%\usr\bin;%MSYS2_HOME%\bin;%PATH%

(実行するコマンド)

endlocal






参考

Comments