レベル: 初級 Pawel Leszek (pawel.leszek@ipgate.pl), Independent Software Consultant, Freelance
2003年 4月 22日 C/C++ の開発プロジェクトにおけるEclipse Platformの使用法をご紹介します。Eclipseは主にJavaの開発環境として使用されますが、そのアーキテクチャーは他のプログラミング言語もサポートしています。この記事では、Eclipseで使用可能な最も優れたC/C++ ツールキットであるC/C++ Development Toolkit (CDT) の使用方法を学習します。
注記: 本記事の更新版、「Eclipse C/C++ Development Toolkit を使ってアプリケーションを開発する」が用意されています。参考資料として、本記事はこのまま残してあります。C++ Standard Template Library (STL) や Eclipse C/C++ Development Toolkit (CDT) についての最新情報は、更新版をご参照ください。
CおよびC++ 言語は、世界で最も広く使用されているプログラミング言語の1つであるため、Eclipse PlatformがC/C++ 開発のサポートを提供していても不思議はありません。Eclipse Platform自体は開発者用ツールのフレームワークにすぎないため、C/C++ を直接サポートしていません。このサポートには外部のプラグインが必要です。この記事では、C/C++ 開発用プラグインのセットであるCDTの活用方法を紹介します。CDTプロジェクト (この記事の最後にある参考文献のセクションにリンクがあります) は、Eclipse Platform用の全機能を備えたC/C++ 統合開発環境 (IDE) の提供を目的に活動しています。このプロジェクトはLinuxに重点を置いてはいますが、Win32 (Win 95/98/Me/NT/2000/XP)、QNX Neutrino、Solarisプラットフォームなど、GNU開発者用ツールが使用可能なすべての環境をその対象としています。
CDTは、Eclipse SDK Platform用プラグインのセットとして、純粋にJavaだけで実装されたオープン・ソースのプロジェクトです (Common Public Licenseの下で認可されています)。これらのプラグインは、Eclipse WorkbenchにC/C++ パースペクティブを追加するものです。その結果、多くのビューやウィザードのほか、高度な編集とデバッグのサポートにより、Eclipse WorkbenchでC/C++ 開発をサポートできるようになります。
CDTは複雑であるため、複数のコンポーネントに分離されており、それぞれが独立したプラグインとなっています。コンポーネントはそれぞれ自律的なプロジェクトとして動作し、それぞれにコミッター、バグ・カテゴリー、およびメーリング・リストを持ちます。しかし、CDTが正常に動作するためには、すべてのプラグインが必要です。以下は、CDTのプラグイン (コンポーネント) の全リストです。
-
Primary CDTプラグイン は、CDTプラグインの「枠組み」となるものです。
-
CDT Feature Eclipse は、CDTのフィーチャー・コンポーネントです。
-
CDT Core は、コア・モデル、CDOM、およびコア・コンポーネントを提供します。
-
CDT UI は、コアUI、ビュー、エディター、およびウィザードを提供します。
-
CDT Launch は、コンパイラーやデバッガーなどの外部ツールの起動メカニズムを提供します。
-
CDT Debug Core は、デバッグ機能を提供します。
-
CDT Debug UI は、CDTのデバッグ用エディター、ビュー、およびウィザードのユーザー・インターフェースを提供します。
-
CDT Debug MI は、マシン・インターフェース (MI) 互換デバッガー用のアプリケーション・コネクターです。
それでは、これらのコンポーネントを実際のアプリケーションでどのように使用できるかを見てみましょう。図1は、Eclipseに表示したC/C++ プロジェクトを示しています。
図1. CDTプラグインを組み込んだEclipseによるC/C++ projectプロジェクトの編集
CDTのインストールと実行
CDTをダウンロードしてインストールする前に、まずGNU Cコンパイラー (GCC) とそれに付属するすべてのツール (make、binutils、GDB) が使用可能であることを確認する必要があります。Linux を使用している場合は、そのディストリビューションに適したパッケージ・マネージャーを使用して、開発パッケージをインストールしてください。Windows プラットフォームの場合は、Cygwinツールキット (参考文献にリンクがあります) をインストールする必要があります。CygwinはUNIXに似た環境をWindowsで実現するためのツールで、GCCポートのほか、automakeやGNUデバッガー (GDB) などの必要な開発ツールをすべて含んでいます。Cygwinは、cygwin1.dll ライブラリーを中心に構築されています。Cygwinに代わるソリューションとしては、Minimalist GNU for Windows (MinGW) があります (参考文献にリンクがあります)。これは、自由に入手および配布できるWindows専用のヘッダー・ファイルとインポート・ライブラリーのコレクションを、サードパーティーのDLLにまったく依存しないネイティブなWindowsプログラムの作成を可能にするGNUのツールセットと組み合わせたものです。POSIX互換のWindowsアプリケーションを作成する場合は、MinGWが最適です。また、MinGWは、CygWinがインストールされている環境でも使用できます。Solaris および QNX では、インターネットからこれら専用のGCC、GNU Make binutils、およびGDBポートをダウンロードする必要があります (参考文献のリンクを参照してください)。
インストールにあたっては、適切なJava SDK/JREおよびEclipse Platform SDKがインストールされていて、それらを問題なく実行できることが前提となります。CDTには、安定型リリースと夜間ビルド (nightly build) の2種類があります。夜間ビルドは、すべての面でテスト済みとなっているものではありませんが、安定型リリースより多くの機能を持ち、最近のバグも修正されています。インストールの前に、ディスク上に旧バージョンのCDTが存在していないか確認してください。旧バージョンが存在する場合は、必ず完全に削除してください。CDTにはアンインストーラーがないため、削除は手動で実行する必要があります。旧バージョンがあるかを確認するには、CDTプラグインがインストールされているディレクトリー、eclipse/plugins に移動します。次に、名前の先頭に org.eclipse.cdt が付くディレクトリーをすべて削除します。最後に、workspace/.metadata/.plugins および features から、CDTのメタデータ・ディレクトリーである or.eclipse.cdt.* を削除します。
次に、CDTのバイナリーをダウンロードします。使用しているオペレーティング・システム用の適切なCDTをダウンロードしてください。残念ながら、CDTはJavaで書かれていながらプラットフォームに依存します。次に、アーカイブを一時ディレクトリーに解凍し、すべてのプラグイン・ディレクトリーの内容を一時ディレクトリーからEclipseの plugins サブディレクトリーに移動します。同様に、features ディレクトリーの内容もEclipseの features サブディレクトリーに移動する必要があります。ここでEclipseを再起動します。Eclipseが再起動すると、更新マネージャーから変更を検出した旨の通知があり、その確認を求められます。これで、CおよびC++ の2つのプロジェクトが使用可能になります。
新規プロジェクトの作成
EclipseにCDTをインストールした後、File => New => Project の順に選択します。Projectメニューでは、C (「Standard C Make Project」)、C++ (「Standard C++ Make Project」)、および「Convert to C or C++ Projects」という3種類の新しいプロジェクトが使用できるようになっています。まずは「Standard Make C++ Project」でプロジェクト用のソース・コードを作成します。C/C++ Projects Viewで右クリックし、New => Simple => File の順に選択します。ファイルに名前を付けて保存します。このようにして、多くのヘッダー用ファイルやC/C++ の実装コード・ファイルを作成していきます。最後に作成するのは、もちろんmakefileです。makefileはバイナリーを作成するためにGNU Makeで使用します。このmakefileには、通常のGNU makeの構文を使用してください (参考文献を参照)。makefilesでは、スペースではなくTabを使用して行をインデントする必要があることに注意してください。
CDTでは、Eclipseに既存のソース・コードをインポートする機会が多くなります (図2を参照)。CDTでは、Importウィザードを使用してファイル・システム・ディレクトリーからWorkbenchにファイルをコピーすることにより、この操作を簡単に実行できるようになっています。メイン・メニューバーから File => Import => File System の順に選択します。Next をクリックしてソース・ディレクトリーを開き、追加するファイルが格納されているディレクトリーを選択します。Select All をクリックしてこのディレクトリーにあるリソースをすべて選択し、その内容を確認しながら追加する必要のないリソースの選択を解除します。インポート先となるWorkbenchのプロジェクトまたはフォルダーを指定します。このほかにも、フォルダーやファイルをインポートするには、それらをファイル・システムからNavigatorビューにドラッグ・アンド・ドロップする方法があります。また、コピー・アンド・ペーストでもインポートできます。
図2. CDTプロジェクトへの既存のソース・コードのインポート
CDT IDEの主要機能
CDT IDEは、CDT UIプラグインによって提供される汎用的で拡張可能なエディターを中心に構築されています。しかし、このモジュールはいまだに開発途上にあるため、クラス・ブラウザーや言語ヘルプ用ブラウザーといった、組み込まれていない重要なユーティリティーがまだいくつかあります。CDT IDEの主要機能は、次のとおりです。
-
構文の強調表示: CDT IDEはC/C++ の構文を認識し、それらを強調表示することができます。この機能でコードに適用される色やフォーマットは、すべてユーザーが設定できます。
図3. コンパイル失敗後に強調表示された構文エラーのマーク
-
アウトライン: Outlineウィンドウ・モジュールは、ソース・コードに存在するプロシージャー、変数、宣言、および関数をすばやく把握できる画面を提供します。アウトラインを使用すると、ソース・コード内の適切な参照に簡単にジャンプしたり、すべてのプロジェクト・コード内を検索することができます。
-
コード作成支援: このコード補完機能は、Borland C++ BuilderやMS Visual Studioなどの補完機能と類似のものです。この機能では、コード・テンプレートを使用して、つまらない構文エラーを回避できるようにしています。
図4. 適切な言語構文の使用を支援するコード作成支援機能
-
コード・テンプレート: コード作成支援機能で使用されるコード・テンプレートは、標準C/C++ 言語で使用されている構文構造の定義を表示したものです。また、独自のコード・テンプレートを定義して、
author キーワードや date キーワードなどについて、ユーザー専用のショートカット機能を拡充することもできます。Window => Preferences => C/C++ => Code Templates の順に選択すると、新しいテンプレートを追加したり、すべてのテンプレートのリストを表示することができます。また、テンプレートをXMLファイルにエクスポートしたり、XMLファイルからインポートしたりすることもできます。
図5. 定義済みのC/C++ コード・テンプレート
-
コード履歴: CVSなどのソース・コード・バージョン管理ソフトウェアを使用していなくても、プロジェクトのソース・コードで部分的に発生した変更を追跡することができます。選択したファイルを右クリックして、コンテキスト・メニューから Compare With => Local History... の順に選択します。
図6. Local History機能を使用したソース・コードの変更チェック
プロジェクトのビルドと実行
CDTを使用すると、プロジェクトのビルド・オプションを簡単に設定することができます。CDTは、GCC、GDB、Makeの3つのGNUツールに依存しています。デバッグではGDB、コンパイルではGCCとMakeを使用しなければならないので、これらのアプリケーションは、ユーザーが使用するプラットフォームで使用可能なものであることが必要です。ほとんどのLinux (および一般にはPOSIX的な) ソース・コード・パッケージでは、ビルド環境の確認にautoconfスクリプトが使用されています。したがって、コンパイル前に、"Makefile" を作成する configure コマンドを実行する必要があります。CDTにはautoconfスクリプトを編集する手段がないため、このスクリプトは手動で作成する必要があります。ただし、コンパイル前に configure コマンドを呼び出すオプションを設定することはできます。
make コマンドを起動してプロジェクトをビルドする場合は、デフォルト設定のままでかまいません。しかし、より複雑な方法を利用するのであれば、Build Commandテキストボックスに適切なコマンド (make -f make_it_all など) を入力する必要があります。次に、C/C++ Projects Viewで、C/C++ project を選択して右クリックし、Rebuild Project を選択します。make、コンパイラー、リンカーからのコンパイル・メッセージは、すべてコンソール・ウィンドウにリダイレクトされます。
図7. コンパイラーからの出力を表示するコンソール・ウィンドウ
コンパイルが成功したら、次は実際にアプリケーションを実行します。実行とデバッグのためのオプションは、すべてEclipseのメイン・メニューのRunメニューにあります。ただし、プロジェクト実行用のオプションは、先に定義しておく必要があります。このオプションの設定は、メイン・メニューのRun... オプションで行います。ここには、アプリケーション実行用のプロファイルがいくつかあります。たとえば、あるプロファイルをテストのために使用し、別のプロファイルを最終バージョンの実行用に使用するということができます。また、アプリケーションに渡す引数の定義や環境変数の設定も可能です。プロジェクト実行用のオプションのほかには、使用するデバッガの種類(GNU GDBやCygwin GDB) などのデバッグ設定用のオプションがあります。図8は、あるプロジェクト用に作成された実行プロファイルです。
図8. プロジェクト用の実行プロファイルの作成
これらのオプションのほかにも、C/C++ Projects Viewでプロジェクトを選択して右クリックし、Build Settingsタブの Properties を選択すると、プロジェクトのビルドに適用する一般的なオプションを設定できます。これらのオプションは、ほとんどがコンパイル・エラーの発生によってビルドが中止された場合の動作に関係するものです。
C/C++ プロジェクトのデバッグ
CDTのデバッグ機能は、標準のEclipse Debug Viewを拡張してC/C++ コードのデバッグ機能を追加したものです。Debug Viewでは、Workbench内でのプログラムのデバッグと実行を管理できます。現在のプロジェクトのデバッグを開始するには、Debug Viewに切り替えます。ここでは、コードにブレークポイントやウォッチポイントを設定して (実行中はいつでも変更可能)、変数やレジスターの内容を追跡することができます。Debug Viewには、デバッグ中の各ターゲットについて、実行が中断されているスレッドのスタック・フレームが表示されます。プログラムの各スレッドは、ツリー内のノードとして表示され、Debug Viewには実行中の各ターゲットの処理が表示されます。
Eclipseは、そのコンポーネントの1つであるCDT Debug MIを介して、マシン・インターフェース (MI) 互換のデバッガーをサポートします。ところで、MIデバッガーとはいったい何でしょうか。従来、dddやxxgdなどのサードパーティー製GUIデバッガー (参考文献にリンクがあります) は、デバッグ機能の実装をGDBの コマンド・ライン・インターフェース (CLI) に依存してきました。しかし、残念なことに、そのインターフェースはきわめて不安定であることがわかってきました。GDB/MIは、GDBの出力を直接解析するプログラムにはるかに適した新しいマシン指向のインターフェースを提供します。
まとめ
C/C++ Development Toolkit (CDT) は、Eclipseを使用したC/C++ アプリケーションの開発を容易にする強力なプラグインのセットです。CDTはまだ開発途上ですが、既に利用可能な機能が数多く存在します。
参考文献
著者について  | |  |
Studio B の著作者であるPaul Leszek氏は、独立ソフトウェア・コンサルタントであると同時に、Linux/Win/Mac OSのシステム・アーキテクチャーと管理を専門とする著作家です。同氏は多数のオペレーティング・システム、プログラミング言語、ネットワーク・プロトコルで豊かな経験を持ち、特にLotus DominoとDB2に関する深い知識を持っています。また、「LinuxWorld」のシリーズ記事の著者であるとともに、ポーランド版「PC World」のLinux関連コラムニストでもあります。同氏は、ワルシャワで夫人とかわいい娘と共に暮らしています。質問やコメントを是非お寄せください。連絡先は、pawel.leszek@ipgate.pl です。 |
記事の評価
|