プロローグ
筆者が関わっているとあるプロジェクトで、マイコンを使った組み込みシステムの開発がある。実際のマイコンを使って開発・検証・デバッグするだけでは限界があるので、なんとかローカルPCで検証環境を作りたい。
開発言語はCなので、純粋なCのコンパイル環境が欲しい。LCDの表示をコンソールアプリ(端末)上でエミュレートするため、できればcurses (ncurses)を使いたい。Linux (Ubuntu)上では難なく実現できるが、勤務先での環境がWindowsなので、Windows上で実現したい。
選択肢は以下の通りである。
Visual Studio
これでもCのコンソールアプリを開発できるが、基本C++なのでソースファイルの拡張子が.cpp
になることや、余計なファイル(プロジェクトファイル等)ができてしまうのが難点。またcursesを使えるようにできる情報もあるが、かなり面倒くさそう。
MSYS2・MinGW-w64
開発環境だけをシンプルに最低限揃えるもの。コンパイルした実行ファイルは、そのまま単独でWindows上で実行可能。cursesも導入できる。ただし、Cygwinと違って、POSIX準拠を目指したものではないので、termios.h
がない等、コンソール系アプリ、特にエスケープシーケンスを直接用いるようなモノを開発するのには向かない。
(2020/09/30追記)
上記はちょっと正確ではないので、以下補足する。
MSYS2を導入すると、実際には「MSYS2」「Mingw-w64 32 bit」「Mingw-w64 64 bit」の3つのシェル(bash)が使えるようになる。開発環境(gcc)も3種類存在する(MSYS2版、Mingw-w64 32ビット版、Mingw-w64 64ビット版)。
どれでもよいので、いずれかのシェル上で開発環境のパッケージを導入する必要がある。例えばgccなら、パッケージ名は以下の通り3つある。
- MSYS2版: gcc
- Mingw-w64 32ビット版: mingw-w64-i686-gcc
- Mingw-w64 64ビット版: mingw-w64-x86_64-gcc
MSYS2のシェルではMSYS2版の開発環境が呼ばれるし、Mingw-w64 64ビット版シェルでは64ビット版の開発環境が呼ばれる。
MSYS2シェルでは「POSIX準拠を目指したものではない」と書いたが、実際にはtermios.h
やsys/ioctl.h
をインクルードするようなコンソール系アプリもコンパイルできる。そのかわり、このアプリはMSYS2シェル上でしか実行できない(Cygwinと同じノリ)。
反対に、Mingw-w64シェルでは、基本的にtermios.h
やsys/ioctl.h
をインクルードするようなコンソール系アプリはコンパイルできない。
したがって、今回の目的では、結果的にMSYS2・MinGW-w64 (のMSYS2シェルおよびMSYS2版の開発環境)でも良かったことになる。
Cygwin
UNIX/Linuxと同等な環境(POSIX準拠)を提供するもの。cygwin.dll
がベースとなっていて、こいつがシステムコール等を処理することにより、ソースレベルの互換性を確保するもの。bashやmake等の開発ツール群も一通り利用できる。cursesも(パッケージを導入すれば)利用できる。昔の「思想はわかるけど、いまいち使えない」ものではなく、完全に使い物になるように進化している!
シンプルに行くならMSYS2・MinGW-w64だが、あくまで検証用なので、作成したアプリを別の場所で単独で実行する必要はなく、できるだけ汎用性が高い方が良いだろう。できればcursesも使えた方が良い。そうするとPOSIX準拠の環境がベスト、との判断でCygwinを採用することにする。
Cygwinでは、必要な機能(コマンド)だけをパッケージとして選択してインストールできるので、必要なパッケージのみを導入することができるのも良い。
次の記事では、実際にインストールを行っていこう。
なお、筆者の環境は、Windows 7 Pro 64ビットとWindows 10 Pro 64ビットの両方である。