EclipseでC言語

EclipseC言語をやるためのプラグインCDTをインストールする。途中いろいろとトラブルがあったので、その解決方法を書いておく。なお、利用したEclipseのバージョンは、3.5である。

入手

Eclipseには最初からC用のプラグインCDTが同梱しているバージョンがある。CDTが同梱していないバージョンの場合は以下の手順でプラグインを追加してやればよい。

Help > Install > Galileo > Programing Language > Eclipse C/C++ Development Tools

次にC言語コンパイラが別途必要になる。コンパイラにはいろいろ種類がある。今回、MinGWを使うことにした。最初はBorlandというコンパイラを使おうとしていたのだが、設定がいろいろ面倒だったので、MinGWをおすすめする。MinGWC言語コンパイラだけど、CもC++も両方いける。ちなみに、MinGWの公式ページにつながらなかったので、source forgeからダウンロードした。

MinGWの設定

まずインストールする。インストールするときにコンポーネントを選択できるので、とりあえずg++とMinGW makeにチェックを入れておいた。インストールの場所はデフォルトにするのが楽。

C:\MinGW

環境変数を設定する。環境変数の設定画面で、Pathの項目の一番後ろに以下を追加

;C:\MinGW\bin

パスが通ってるかテストする。コマンドプロンプトを開いて、gccと打ち込んで、ちゃんと反応があれば成功。次にコンパイルできるか試してみる。以下のコードをHello.cという名前で保存。

#include <stdio.h>
int main()
{
	printf("Hello, C!");
	return 0;
}

コマンドプロンプトで、これをコンパイル

gcc Hello.c

うまくいけば、a.exeが作られる。これをコマンドプロンプトでそのまま実行。

a

.exeは省略してもかまわない。これで、「Hello, C!」が出力されるはず。次にmakeコマンドを試してみる。makeは、コンパイルの作業を楽にするためのものだが、EclipseのCプラグインは、もともとmakeを利用してコンパイルすることを想定しているらしい。まずもっとも単純なメイクファイルを作る。名前はそのまんまmakefile。内容は以下のとおり。これをHello.cと同じ場所に置く。

Hello : Hello.c
	gcc -o Hello Hello.c

ちなみにセミコロンの左側がターゲット名、右側がそれに依存しているファイル、二行目がこのターゲットを実行したときの内容。これを作ったら、コマンドプロンプトで、Hello.cとmakefileが置いてあるフォルダに移動して、以下のようにmakeコマンドを実行。ちなみにMinGWのmakeコマンドは、makeという名前じゃなくて、mingw32-makeになってる。また本当は、引数としてメイクファイルを指定してやる必要があるが、メイクファイルの名前がmakefileになってる場合は省略できるので今回は引数なし。

mingw32-make

これを実行すると、Hello.exeというファイルが作られる。先ほどaを実行したのと同様にコマンドプロンプト

Hello

と入力すれば実行できる。

Eclipseとの連携

コンパイル

Eclipseで新規にC言語のプロジェクトを作成。今回はHelloCというプロジェクト名にした。さっき上で作ったHello.cとmakefileをプロジェクトに突っ込む。次にEclipseで新しく「Make > Make Targets」というビューを開く。マトみたいなアイコンから、新規にターゲットを作成できる。ここで、Helloという名前のターゲットを作る。ここで、Make Targetの項目にも同じくHelloを指定。これは先ほど作成したmakefileのターゲット名に対応している。要するに、makefileの内容とあわせる必要がある。

ターゲットが作成できたら、新しく作られたターゲットをダブルクリックする。おそらく次のようなエラーがコンソールに出るはず。

**** Build of configuration Default for project HelloC ****
(Cannot run program "make": Launching failed)

これは、MinGWのmakeコマンドがmingw32-makeという名前をしているせい。この設定を変えてやる。プロジェクトエクスプローラで、現在のプロジェクトを右クリック、設定画面を開く。C/C++ Builderを選ぶと、その中にBuild commandという項目がある。現在「make」という値が入っているので、これを「mingw32-make」に変更。これで、正しくmakeができるようになっているはず。makeしてみると、このような画面がコンソールに出る。

**** Build of configuration Default for project HelloC ****
mingw32-make Hello 
gcc -o Hello Hello.c
同じ設定を新規プロジェクトに適用

今、上で行ったmakeの設定は、現在のプロジェクトにのみ有効な設定である。そのため、これから新たに作るプロジェクトには適用されない。新規プロジェクトにも適用できるようにするには、以下のようにする。

Eclipse > Window > Preferences > C/C++ > New CDT Project wizard > Makefile Project > Builder Setting

この画面で、Build commandを「make」から「mingw32-make」に変更。

実行

コンパイルができたら、最後に実行。Hello.cのソースコードを選択しておいて、以下のように選択する。

Run > Run as > Local C/C++ Application

しかしここでは、以下のようなエラーが出る。

Launch failed. Binary not found.

対策として、Run Configurationsで、C/C++ Aplicationのところに、新しく起動設定を作成する。以下の画面のように、C/C++ Applicationの項目にHello.exeを指定する。

ただし、この画像の左上を見てもらったら分かるように、これだけではエラーが出ている。「Re: (困)Eclipse & CDT」というタイトルでやりとりされていたメーリングリストによると、Binary Parserの設定を変えるといけるらしい。

プロジェクトエクスプローラで現在のプロジェクトを右クリック、設定画面を開く。C/C++ Build > SettingsのBinary Parsers画面で、GNU Elf Parserあたりにでもチェックを入れてやる。これで、設定を保存しておいて、Run(Ctrl + F11)すると、無事にプログラムが走り、コンソール内に「Hello, C!」の文字が出力される。

ちなみに、このとき先ほどのRun Configurationsの画面を見てみると、なぜかいまだにエラーが出ている。そのため、この画面から実行することはできない。結局原因がいまいち分からない。

余談

Twitterで@areat_nakoさんにコメントをもらった。VC++なら、開発環境とコンパイラが一体になってて、設定がもっと楽らしい。makefileもいちいち作らなくていいとのこと。今回EclipseにCDTを入れようと頑張ってみたけど、しょうもないエラーにすぐひっかかるし、CDT自体があまり精錬されているようには思えなかったし、CDTに関する情報も少なかった。多分EclipseC言語をやるのは主流じゃないんだろうな。

参考

今回「Eclipse with CDT」を参考にさせてもらった。ただしEclipseのバージョンが違うので、ちょっとだけ内容が違う。