2008年6月27日金曜日

Windows で MinGW と Meadow を使い C 言語をコンパイル

1. 「プログラミング言語 C」

本棚を整理していたら、なつかしい本が出てきた。

プログラミングをはじめたときはオブジェクト指向真っ盛りで、C 言語は本棚の隅に追いやられていた。

必ず一度は通る定番の言語として、古典と呼ばれる本だけは押さえておきたかった。しかし、購入しただけで、本棚の隅に追いやっていた。 ^^;

訳者まえがきを読むと、隔世の感がある。

郵便だと、アメリカとのやりとりには約 2 週間かかるが、電子メールならすぐ連絡がつく。 1981 年当時と比べると隔世の感がある。(…)

1989年5月

 

2. MinGW を利用する

プログラミング言語C に掲載されているコードを Windows 上で試したい。Windows 上で C ができる環境を整えることにした。

ゴテゴテした IDE を利用せず、なるべくシンプルな環境にしたい。適当に C コンパイラをインストールし、Meadow で C のコードを編集するという方針にする。

タダで始めるC/C++プログラミング for Windows の中で紹介されていた MinGW を試してみることにする。

MinGW は UNIX 用の C/C++ コンパイラの GCC を Windows に移植し,Windows ネイティブなプログラムを作成するためのヘッダファイルなどを整備するプロジェクトです。

サイトから MinGW-5.x.x.exe をダウンロードして下さい。Latest File Releases に無い場合には,SourceForge.net の [View ALL Project Files] から選んでください。

より UNIX 風に使いたい場合には,UNIX に似たコンソールを提供する MSYS (Minimal SYStem) も使うと良いでしょう。

同じく GNU Compiler Collection として Cygwin がある。Cygwin は、UNIX 環境を Windows 上に再現するという感じ。今回はコンパクトな MinGW を利用する。

 

3. MinGW と Cygwin の違い

MinGW – Wikipedia によると、 Cygwin との違いは、

MinGWはCygwin 1.3.3からフォークした。Cygwin、MinGWいずれもUnixソフトウェアのWindowsへの移植に使用されるが、異なる方針を採っている。 CygwinはLinuxや他のUNIXシステムに見られるような、Windows上に完全なPOSIX層を提供することを目標にしており、互換性のために必要であれば性能も犠牲にしている。一方でMinGWはフリーのコンパイラと各種ツールのみを行い、性能を重視している。

ライセンスについては、 Routine-Work:/topics/MinGW/overview.html によると、

cygwin1.dll が GPL であるということは cygwin1.dll をリンクするすべてのプログラムにも GPL が適応されるということです. つまりすべてのソースコードを GPL に従ってと公開する必要があります.

MinGW の基本部分のライセンスはパブリックドメインです.また Win32 API のインポートライブラリとヘッダについても自由に使うことのできるライセンスとなっています.

 

4. MSYS

MinGW プロジェクトには、 MinGW 以外にも MSYS というのがある。

MSYS – Wikipedia によると、

Windows上で動作するシェル(Bash)やテキスト操作ユーティリティ(gawk,sed, findutil)、ソースコードパッチ用ツール(diffutil), アーカイブツール(tar, bzip, zlib)を統合したパッケージである。MinGWを補う目的で作られた。

後で必要になってから、インストールすることにした。

 

5. MinGW のインストール

SourceForge.net: Files から MinGW-5.1.4.exe をダウンロードしてインストール。

環境変数 Path に c:\MinGW\bin を追加し、再ログイン。

 

6. Meadow の設定

インデントスタイルを設定した。スタイルはもちろん K&R 。

字下げスタイル – Wikipedia

K&Rスタイルとは、ブライアン・カーニハンデニス・リッチーの著書『プログラミング言語C』で使われた字下げスタイルであり、C言語で一般に使われている。

CC-mode の簡単な使い方 を参考に .emacs に以下のように記述した。

(add-hook 'c-mode-hook
	  '(lambda()
	     (c-set-style "k&r")))

 

参考サイト

Emacs Lisp は全く知らないので、いつかは一通り目を通そう。^^;