コンソールアプリケーションのビルド環境をmsysからmsys2に変更したので、今回はその簡単な解説と環境の構築について書いていこうと思います。
ーーー
msys(msys2)とは何か
msysはUNIX系のシェル環境(※1)をWindows上で実現するソフトウェアの1つです。
msys2はmsysの実質的な後継に位置づけられるソフトウェアです(厳密には別のプロジェクトですが)。
これらとMinGW(Minimalist GNU for Windows)というGNUのツール群と組み合わせることでUNIXのようなシェル環境でWindowsのソフトを開発することが可能になります。
LinuxなどのUNIX系で作られたソフトウェアをWindowsに移植する場合も比較的少ない変更で実行ファイルをビルド出来る場合も多く、Windowsをメインに使っている者としては便利なツールです。
ーーー
インストール
まず最初に公式サイトからインストーラをダウンロードして基本パッケージをインストールします。
msys2がインストールされた場所から"\home"を辿るとWindowsのログイン名でディレクトリが作られており、ここが作業スペースになります。
ーーー
パスを通す
作業スペースにはWindowsでのcmd.exe(※2)に当たるbashの設定ファイル".bash_profile"が保存されています。これを以下のように変更、若しくは追記します。
例
MinGW-W64(※3)が"C:\MinGW-W64"にmsys2が"C:\msys64"インストールされている際、"C:\MinGW-W64\bin"と"C:\msys64\usr\local"にパスを通す場合。
export PATH=$PATH:'/C/MinGW-W64/bin/':'/C/msys64/usr/local/'
若しくは以下のような表記でも可
export PATH=$PATH:'C:\MinGW-W64\bin\':'C:\msys64\usr\local\'
しかし、以下のよう表記ではダメなので注意
export PATH=$PATH:'C:/MinGW-W64/bin/':'C:/msys64/usr/local/'
msys2ではデフォルトでは実際のWindowsのドライブは"/D"とか"/C"という形でマウントされており、基本的には1番目の方法で指定するのがよいでしょう。
例のように設定することでMinGW-W64のコマンドがmsys2から使えるようなります。
なお
echo $PATH
とすると、パスの通ったディレクトリを確認出来ます。
ーー
マウントする
msys2ではmsysと同様に仮想的なディレクトリ構造にWindowsの特定のディレクトリをマウントすることが可能です。
このためにはmsys2のルート以下の"/etc/fstab"というファイルを書き換えます。
例
Windows側の"c:\msys\1.0"ディレクトリをmsys2の"/msys1"ディレクトリとして割り当てる。
C:/msys/1.0 /msys1
以下の表記も可
C:\msys\1.0 /msys1
以下はダメ
C:\msys\1.0 \msys1
/C/msys/1.0 /msys1
元祖であるcygwinでの指定方法を確認するとディレクトリ区切りは’/‘を用い、ドライブは"C:"というような形で指定するようです。
msys2でもパス区切り文字はUNIXの流儀(※4)に従って’/’を使用するべきなのでしょう。
設定が正しく反映されているかどうかは、mountコマンドを使うことで確認することができます。
ーー
makeのインストール
ソフトウェアをビルドする場合はmakeというツールをインストールしておきます。
msys2にはpacman(※5)と言う名前のパッケージマネージャが含まれており、様々なソフトウェアをネットワーク経由で入手することが出来るので、ここではこれを使用します。
msys2のシェルを起動し、以下のようにコマンドを打ち込みます。
pacman -S make
エラーがでなければ、これでmakeがインストールされたはずです。
ーーー
msysとmsys2の違い
一番の違いはmsys2の方が新しく、開発も継続しているということです。
使用されているツール類のバージョンも新しいため、問題がなければmsys2を使用するのがよいと思われます。
一方で実際にいくつかのプログラムをビルドをしてみた際、msysで問題が出なかったものがmsys2で問題が起きたり、若しくは逆の場合もありました。
そのため、個人的にはmsysの環境も残しておくつもりです。
ーーー
脚注
- シェル環境はWindowsにおけるコマンドライン(CMD)もしくはパワーシェルに相当します。
- いわゆるコマンドラインと呼ばれるものです。
- MinGW32から派生したプロジェクトで64bit環境に対応したものです。
- UNIX系のシェル環境ではディレクトリの区切りは’/‘が標準です。対してWindowsでは’\‘が標準になっています。経緯については以下が詳しいです。 https://ascii.jp/elem/000/001/763/1763591/
- pacmanと初めて聞いた際、黄色いドットを食べまくるアレを思い浮かべたのは自分だけではないでしょう。