[ C++で開発 ]
組み込み環境向けなど従来GNU Compilerに独自ツールを追加していた開発の世界に徐々にEclipse CDTが浸透してきています。GNU C/C++コンパイラを使う開発環境ではEclipse CDTが今注目されています。
CDTは、Eclipseのプラグインの1つで、C/C++開発用の主要機能を提供するものです。
目次
2009年6月27日現在、Galileoバージョン(3.5)、CDT 6.0が最新です。
2009年3月22日現在、Ganymedeバージョン(3.4.2)、CDT 5.0.2が最新です。
2008年9月30日現在、Ganymedeバージョン(3.4.1)、CDT 5.0.1が最新です。
2008年3月16日現在、Europa winterバージョン(3.3.2)、CDT 4.0.3が最新です。
2007年夏に、Eclipse 3.3(Europa)がリリースされました。CDTのバージョンは4.0となっています。
Eclipse CDT 3.2の機能
CentOS 5では、Eclipse 3.2がパッケージとして用意されています。これならCentOSの他のパッケージと同じように簡単にインストールできます。
Eclipse 3.3を入れる場合は、パッケージが提供されていないので、SunのJava実行環境(または開発環境)とEclipse EuropaのC/C++ Linux用アーカイブを入手・インストールします。
Eclipse 3.3は、JDK 5を推奨しています。JDK 6でも動くかもしれません。なお、JDK 5のRed Hat 5におけるJavaインプットメソッド問題というのがUpdate 14で解消されるので、JDK 5の場合はUpdate14を入れた方がよいでしょう。
注記)2008.2.29 JDK6u4でEcilpse 3.3 Europa fall2を動かすと起動時にGTKLookAndFeel.initSystemColorDefaultsでNullPointerException発生します。BugID:6389282で管理されているバグによるもので、JDK 6u10_build12(開発者向けEarly Releaseが入手可)で修正されています。
Eclipseは、とりあえず/usr/local/eclipseディレクトリを作成し、その中に展開します。/usr/local/eclipse/eclipseディレクトリを/usr/local/eclipse/eclipse-europa-cdtに変更します。
日本語化をする場合は、pleiades-1.2.3.p6.zipをeclipse-europa-cdtに展開し、eclipse.ini.sample.3.3-をeclipse.iniに名前変更し、最後の行の-javaagent:のパスを相対パスではなく絶対パスに書き換えます。
--launcher.XXMaxPermSize 256M -vmargs -Dosgi.requiredJavaVersion=1.5 -Xms40m -Xmx384m -javaagent:/usr/local/eclipse/eclipse-europa-cdt/plugins/jp.sourceforge.mergedoc.pleiades/pleiades.jar
pleiadesがログを生成するディレクトリに書き込み権がないとエラーになるので、/usr/local/eclipse/eclipse-europa-cdt/configurationディレクトリに書き込み権をセットします。
eclipseは起動するときに、gtk関連パッケージの例外(NullPointerException)が発生しますが、実行には問題ないようです。
Eclipse 3.4を入れる場合は、パッケージが提供されていないので、SunのJava実行環境(または開発環境)とEclipse EuropaのC/C++ Linux用アーカイブを入手・インストールします。
Eclipseを、<インストールディレクトリ>(例:/usr/local/eclipse)を作成し、その中に展開します。/usr/local/eclipse/eclipseディレクトリができるので、/usr/local/eclipse/eclipse-cpp-ganymedeに変更します。
~# mkdir /usr/local/eclipse ~# cd /usr/local/eclipse eclipse# tar xzf ~/eclipse-cpp-ganymede-SR2-linux-gtk.tar.gz eclipse# mv eclipse eclipse-cpp-ganymede eclipse#
日本語化したい、という場合、(1) pleiadesプラグインを使う方法、(2) 日本語化言語パック(サードパーティ版)を使う方法、(3) Babelプロジェクト の3つがあります。いずれの手段も、翻訳に尽力されているpleiadesの柏原さん、日本語化言語パックの伊賀さん、他の方々の成果です。ここで感謝の意を表します。
日本語化をする場合は、pleiades-1.3.0.zipを/usr/local/eclipse/eclipse-ganymede-cdtの中に展開します。readme/eclipse.ini_sample.win.3.4をeclipse.iniに名前変更し、1箇所修正します。
eclipse# cd eclipse-cpp-ganymede eclipse-cpp-ganymede# unzip ~/pleiades_1.3.0.zip : eclipse-cpp-ganymede# cp readme/eclipse.ini_sample.win.3.4 eclipse.ini eclipse-cpp-ganymede# vi eclipse.ini
以下の下線部分が要変更箇所です。
--launcher.XXMaxPermSize 256M -vmargs -Dosgi.requiredJavaVersion=1.5 -Xms256m -Xmx256m - -javaagent:/usr/local/eclipse/eclipse-cpp-ganymede/plugins/jp.sourceforge.mergedoc.pleiades/pleiades.jar
また、実行するマシンのメモリ容量によっては、-Xmxを調整してもよいでしょう。
普通にeclipse直下のfeaturesとpluginsディレクトリ以下に展開すると、Linux版では起動エラーになってしまうので、eclipse配下のdropinsディレクトリの中に展開します。
eclipse# cd eclipse-cpp-ganymede eclipse-cpp-ganymede# cd dropins dropins# unzip ~/NLpackja-eclipse-cpp-ganymede-SR1-blancofw.zip : dropins#
後は通常どおりeclipseを起動します。
複数のユーザがeclipseを実行するとき、ecliseのなかに書き込み権限が必要なディレクトリがあります。そこで、
pleiadesがログを生成するディレクトリに書き込み権がないとエラーになるので、/usr/local/eclipse/eclipse-europa-cdt/configurationディレクトリに書き込み権をセットします。
新しいプロジェクトを作成する際に選択可能なC++プロジェクトの種類は以下です。
Eclipse起動時にダイアログでworkspaceの場所を聞いてきます。このワークスペースはプロジェクトを収容するディレクトリになります。大抵のプログラム開発は、複数の実行ファイル、ライブラリファイルから構成されるので、それぞれ個々の実行ファイル・ライブラリファイルを作成するプロジェクトを複数束ねることが必要になります。それがワークスペースです。ですから、プログラム開発ごとにワークスペースを専用に設けるのがよいでしょう。
ワークスペースを作成すると、そのディレクトリに.metadataというディレクトリが生成され、中にEclipseが管理するデータが作られます。Eclipseの設定情報はこの中に格納されます。
.metadata内(ワークスペース作成直後、部分抜粋)
myworkspace +--- .metadata | +--- .lock | +--- version.ini | +--- .plugins +--- org.eclipse.cdt.core | +--- .log :
新規にプロジェクトを生成すると、デフォルトではワークスペースディレクトリの直下にプロジェクト名で記述した名前のディレクトリが生成されます。
ディレクトリを生成すると、そのディレクトリに.cprojectおよび.projectというファイルが生成されます。
myworkspace +--- .metadata +--- myproject | +--- .cproject | +--- .project
プロジェクトの構成要素(ヘッダーファイル、実装ファイル、メイクファイル等)は、このプロジェクトディレクトリ内に保持するのがEclipseのCDTの現在の想定のようです。
CDTが管理(自動生成)するMakefileは、存在しなければプロジェクト設定ファイルから自動生成されるので、バージョン管理等での管理は不要です。(生成時に絶対パスが入るので管理は無意味)
myproject +--- include | +--- myproj.h +--- src | +--- myproj.cpp +--- デバッグ | +--- makefile | +--- objects.mk | +--- sources.mk | +--- src | +--- myproj.d | +--- subdir.mk +--- リリース : (デバッグと同様)
デバッグおよびリリースディレクトリの下に、それぞれデバッグビルド、リリースビルド用のmakefileが生成されます。
この生成されたmakefileを見ていると、ユーザー(開発者)が独自に定義した記述を取り込むようにフックポイントが定義されています。
myproject直下に、makefile.initおよびmakefile.defs、makefile.targetsのファイルがあればインクルードするようになっています。
是非はおいておき、いままでのC/C++プログラム開発でよく用いられるディレクトリ構成の一つは以下のものです。
program_top +--- include | +--- sub1 | +--- sub2 | : +--- src | +--- sub1 | +--- sub2 | :
Eclipseでこの構成を取ろうと試みましたが、Eclipse CDTでは簡単には実現できていません。Eclipse CDTは、プロジェクト・ディレクトリの下にソースフォルダ、インクルードフォルダ、Makefile類を置くからです。
まず、プロジェクトのディレクトリは、プロジェクトを作成するときに、[デフォルトロケーションの使用]のチェックを外し、ワークスペース(program_top)ではなく、その下のsrcを指定することでsrcの下にプロジェクト名sub1などを生成することはできます。
インクルードについては、フォルダを新規に作る際、ファイルシステムへのリンクを指定すれば、プロジェクトのディレクトリ下でない場所を指定できます。
ソースフォルダは、指定した場所の下に"src"というディレクトリを作ってしまうので、ソースフォルダは使用せず普通のフォルダを作成します。
それでもうまくいかない・・・
ということで、EclipseでMakefile生成をさせる場合は、Eclipseが想定しているディレクトリ構成にするしかなさそうです。ツールに縛られるのも何ですが。
program_top <--- Eclipseのワークスペースをここに指定 | +--- sub1 <--- sub1プロジェクトはここ | +--- include | | +--- sub1 | +--- src | +--- sub1 | +--- sub2 <--- sub2プロジェクトはここ | +--- include | | +--- sub2 | +--- src | +--- sub2 :
また、Eclipseが生成するMakefileは絶対パスが入ってくるので、別なディレクトリにコピーしたりバージョン管理で共有するときに細工が必要になるようにみえます。
いっそのこと、EclipseにはMakefileを管理させないで、1つのプロジェクトでディレクトリツリー全体を管理させるという方法もあります。これならMakefileを別途作成する必要はありますが、余計なことで悩むこともないかと。
複数の実行ファイル、共有ライブラリファイルからなるプログラムをEclipseワークスペースで開発します。
abcprog +--- include | +--- abc | +--- alpha | +--- beta | +--- gamma +--- src +--- abc +--- alpha +--- beta +--- gamma
EclipseにはまかせないでMakefileを用意します。ここでは、簡便にMakefileを生成するのにMPCツールを使いました。MPCツールについてはこちらのページで簡単な紹介をしています。
MPCツール用の設定ファイルとして、トップディレクトリ直下にabcprog.mwcファイルを、src/abcの下の各プロジェクトソースディレクトリの下に{alpha|beta|gamma}.mpcファイルを作成しました。
abcprog +--- abcprog.mwc +--- include | +--- abc | +--- alpha | +--- beta | +--- gamma +--- src +--- abc +--- alpha | +--- alpha.mpc +--- beta | +--- beta.mpc +--- gamma | +--- gamma.mpc
キーバインドをEmacsにしていて、ワークスペースを新たに作ったとき、キーバインドがEmacsでないのに衝撃を受けました。これは、Eclipseの設定がワークスペース単位に保存されるという設計だったからです。(普通はユーザー毎だよねぇ。。。)
そこで、あるワークスペースの設定を別なワークスペースにエクスポートしインポートするという手順で設定を共有します。
Eclipseの外観(色およびフォント)は、X上でGTKの設定によって制御することができます。
Eclipse Europaでは、標準でCVSと連携する機能を持っています。他のバージョン管理システムと連携するには、それぞれ専用のプラグインを入手して組み込むことになります。
Subversionと連携するプラグインの種類は以下2つが入手容易のようです。SubversiveはEclipseプロジェクトに組み込まれたので、今後はEclipse標準のSubversionプラグインになるのではないかと思われます。
Apache 2.2用Subversionがインストールされている場合、注意点があります。
インストール手順に従って、設定します。
[ヘルプ]メニュー→[ソフトウェアの更新]→[検索およびインストール]で表示される「インストール/更新」ダイアログで、[インストールする新規フィーチャーを検索]を選択し[次へ]ボタンを押す。
*1) 2008年11月11日現在、Eclipse 3.2+用は、http://subclipse.tigris.org/update_1.4.x です。
Eclipseのプロジェクトとして作られたディレクトリがリポジトリに登録されている場合、以下の手順でリポジトリ上のディレクトリをチェックアウトし、Eclipseのプロジェクトとして認識させることができます。
Subclipse 1.4.xは、Subversion 1.5相当です。Subclipseでチェックアウトした作業ディレクトリを、Subversion 1.4等のコマンドで別途アクセスしようとするとエラーになります。
Subversiveは2つのモジュール"Subversive plug-in"と"Subversivce SVN Connector"の2つから構成されます。"Subversive SVN Connector"はWindows OSでは2種類(JavaHL、SVNKit)から選べます。
Subversiveを構成する2つのモジュールはそれぞれ別URLで更新サイトが管理されているので、2つを登録する必要があります。
[ヘルプ]メニュー→[ソフトウェアの更新]→[検索およびインストール]で表示される「インストール/更新」ダイアログで、[インストールする新規フィーチャーを検索]を選択し[次へ]ボタンを押す。
- Subversive plug-in
- http://download.eclipse.org/technology/subversive/0.7/update-site/
- Subversion SVN Connectors
- http://www.polarion.org/projects/subversive/download/eclipse/2.0/update-site/
Subversiveのバージョンは2008年6月30日現在 0.7.1ですが、これはEclipseプロジェクトとしてのバージョン管理指針に従って付けたものであり、以前polarion.orgで公開されていたときのバージョン1.1より新しい内容となっています。
複数のプロジェクトを1つの「ワーキングセット」として束ねてSubversionと同期ができるような機能と思われます。(使いこなしたら詳細記述)
Trolltech社のGUIツールキット Qt を使った開発用プラグインがあります。
Linux用のファイルをダウンロードし、featuresとpluginsディレクトリをeclipseの下にコピーし再起動します。
Qt用のプロジェクトウィザードが追加されます。[ファイル]メニュー→[新規]→[その他]で新規ウィザード選択ダイアログが表われます。選択可能なQtプロジェクトは以下です。
例えば、実行ファイルをstringとすると、ヘッダーファイルとして認識されてしまいます。解決方法は、既存のヘッダーファイルと別名にする。