Cygwinを導入する(1)

プロローグ

筆者が関わっているとあるプロジェクトで、マイコンを使った組み込みシステムの開発がある。実際のマイコンを使って開発・検証・デバッグするだけでは限界があるので、なんとかローカル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.hsys/ioctl.hをインクルードするようなコンソール系アプリもコンパイルできる。そのかわり、このアプリはMSYS2シェル上でしか実行できない(Cygwinと同じノリ)。

反対に、Mingw-w64シェルでは、基本的にtermios.hsys/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ビットの両方である。

(Cygwinを導入する(2)に続く)