msysからmsys2へビルド環境を変更した話

コンソールアプリケーションのビルド環境msysからmsys2に変更したので、今回はその簡単な解説と環境の構築について書いていこうと思います。

ーーー

msys(msys2)とは何か

msysはUNIX系のシェル環境(※1)をWindows上で実現するソフトウェアの1つです。

msys2msysの実質的な後継に位置づけられるソフトウェアです(厳密には別のプロジェクトですが)。

これらと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の環境も残しておくつもりです。

ーーー

脚注

  1. シェル環境はWindowsにおけるコマンドライン(CMD)もしくはパワーシェルに相当します。
  2. いわゆるコマンドラインと呼ばれるものです。
  3. MinGW32から派生したプロジェクトで64bit環境に対応したものです。
  4. UNIX系のシェル環境ではディレクトリの区切りは’/‘が標準です。対してWindowsでは’\‘が標準になっています。経緯については以下が詳しいです。 https://ascii.jp/elem/000/001/763/1763591/
  5. pacmanと初めて聞いた際、黄色いドットを食べまくるアレを思い浮かべたのは自分だけではないでしょう。

コメントを残す