[ C++で開発 ]

Eclipse CDTメモ

組み込み環境向けなど従来GNU Compilerに独自ツールを追加していた開発の世界に徐々にEclipse CDTが浸透してきています。GNU C/C++コンパイラを使う開発環境ではEclipse CDTが今注目されています。

CDTは、Eclipseのプラグインの1つで、C/C++開発用の主要機能を提供するものです。

目次

Eclipse CDTバージョンと機能の整理

バージョン

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 6.0の新機能

Eclipse CDT 5.0の新機能

Eclipse CDT 4.0の機能

Eclipse CDT 3.2の機能

インストール

CentOS 5 x86の場合

Eclipse 3.2

CentOS 5では、Eclipse 3.2がパッケージとして用意されています。これならCentOSの他のパッケージと同じように簡単にインストールできます。

Eclipse 3.3

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)の問題回避

日本語化をする場合は、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

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の柏原さん、日本語化言語パックの伊賀さん、他の方々の成果です。ここで感謝の意を表します。

日本語化方法その1(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を調整してもよいでしょう。

日本語化方法その2(日本語化言語パックサードパーティ版)

普通に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++プロジェクトの種類は以下です。

実行可能(Executable)
実行可能なプログラムファイルをビルドするためのプロジェクトです。MakefileはCDTで管理されます(自動生成される)。
共用ライブラリー(Shared Library)
共有ライブラリファイルをビルドするためのプロジェクトです。MakefileはCDTで管理されます(自動生成される)。
staticライブラリー(Static Library)
静的ライブラリファイルをビルドするためのプロジェクトです。MakefileはCDTで管理されます(自動生成される)。
Makefileプロジェクト(Makefile project)
既にMakefileとソースがある物を取り込むときに使います。MakefileはCDTで管理されません。

ディレクトリ構成

ワークスペース(workspace)

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

CDTが管理(自動生成)するMakefileは、存在しなければプロジェクト設定ファイルから自動生成されるので、バージョン管理等での管理は不要です。(生成時に絶対パスが入るので管理は無意味)

Eclipseが生成する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++ディレクトリ構成を取るには・・・

是非はおいておき、いままでのC/C++プログラム開発でよく用いられるディレクトリ構成の一つは以下のものです。

program_top
   +--- include
   |       +--- sub1
   |       +--- sub2
   |       :
   +--- src
   |       +--- sub1
   |       +--- sub2
   |       :

Eclipseでこの構成を取ろうと試みましたが、Eclipse CDTでは簡単には実現できていません。Eclipse CDTは、プロジェクト・ディレクトリの下にソースフォルダ、インクルードフォルダ、Makefile類を置くからです。

まず、プロジェクトのディレクトリは、プロジェクトを作成するときに、[デフォルトロケーションの使用]のチェックを外し、ワークスペース(program_top)ではなく、その下のsrcを指定することでsrcの下にプロジェクト名sub1などを生成することはできます。

インクルードについては、フォルダを新規に作る際、ファイルシステムへのリンクを指定すれば、プロジェクトのディレクトリ下でない場所を指定できます。

ソースフォルダは、指定した場所の下に"src"というディレクトリを作ってしまうので、ソースフォルダは使用せず普通のフォルダを作成します。

それでもうまくいかない・・・

Eclipse CDTが想定するディレクトリ構成に合わせるか、

ということで、EclipseでMakefile生成をさせる場合は、Eclipseが想定しているディレクトリ構成にするしかなさそうです。ツールに縛られるのも何ですが。

program_top               <--- Eclipseのワークスペースをここに指定
   |
   +--- sub1              <--- sub1プロジェクトはここ
   |      +--- include
   |      |       +--- sub1
   |      +--- src
   |              +--- sub1
   |
   +--- sub2            <--- sub2プロジェクトはここ
   |      +--- include
   |      |       +--- sub2
   |      +--- src
   |              +--- sub2
   :        

また、Eclipseが生成するMakefileは絶対パスが入ってくるので、別なディレクトリにコピーしたりバージョン管理で共有するときに細工が必要になるようにみえます。

Eclipse CDTにはMakefileを管理させないか、

いっそのこと、EclipseにはMakefileを管理させないで、1つのプロジェクトでディレクトリツリー全体を管理させるという方法もあります。これならMakefileを別途作成する必要はありますが、余計なことで悩むこともないかと。

Makefileプロジェクトで複数ディレクトリ管理

複数の実行ファイル、共有ライブラリファイルからなるプログラムをEclipseワークスペースで開発します。

想定ディレクトリ

abcprog
   +--- include
   |      +--- abc
   |             +--- alpha
   |             +--- beta
   |             +--- gamma
   +--- src
          +--- abc
                 +--- alpha
                 +--- beta
                 +--- gamma
    

Makefileの作成

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の設定がワークスペース単位に保存されるという設計だったからです。(普通はユーザー毎だよねぇ。。。)

 そこで、あるワークスペースの設定を別なワークスペースにエクスポートしインポートするという手順で設定を共有します。

参考

ワークスペース設定を別なワークスペースへ反映させる

 保存したい設定をしているワークスペースで「設定」をエクスポート
 設定を取り込みたいワークスペースに切り替えて「設定」をインポート

色およびフォントの外部指定

GTKにおける外観設定

Eclipseの外観(色およびフォント)は、X上でGTKの設定によって制御することができます。

設定サンプルのリンク

バージョン管理

 Eclipse Europaでは、標準でCVSと連携する機能を持っています。他のバージョン管理システムと連携するには、それぞれ専用のプラグインを入手して組み込むことになります。

Subversion管理システムとの連携

 Subversionと連携するプラグインの種類は以下2つが入手容易のようです。SubversiveはEclipseプロジェクトに組み込まれたので、今後はEclipse標準のSubversionプラグインになるのではないかと思われます。

  1. Subclipse
    http://subclipse.tigris.org/
  2. Subversive
    http://www.eclipse.org/subversive/

Subclipseを組み込み利用する

 Apache 2.2用Subversionがインストールされている場合、注意点があります。

インストール(ソフトウェア更新サイトよりオンラインで)

 インストール手順に従って、設定します。

*1) 2008年11月11日現在、Eclipse 3.2+用は、http://subclipse.tigris.org/update_1.4.x です。
プロジェクトのチェックアウト

Eclipseのプロジェクトとして作られたディレクトリがリポジトリに登録されている場合、以下の手順でリポジトリ上のディレクトリをチェックアウトし、Eclipseのプロジェクトとして認識させることができます。

OSのsvnコマンドとの共存

Subclipse 1.4.xは、Subversion 1.5相当です。Subclipseでチェックアウトした作業ディレクトリを、Subversion 1.4等のコマンドで別途アクセスしようとするとエラーになります。

Subversiveを組み込み利用する

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と同期ができるような機能と思われます。(使いこなしたら詳細記述)

GUIプログラム開発

Qtツールキット

Qt Eclipse Integration プラグイン

Trolltech社のGUIツールキット Qt を使った開発用プラグインがあります。

Linux用のファイルをダウンロードし、featuresとpluginsディレクトリをeclipseの下にコピーし再起動します。

Qt用のプロジェクトウィザードが追加されます。[ファイル]メニュー→[新規]→[その他]で新規ウィザード選択ダイアログが表われます。選択可能なQtプロジェクトは以下です。

ドキュメント生成

Doxygen

doxygen

問題解決

プロジェクト設定

実行可能ファイルがヘッダーファイルと同名だと、実行ファイルとして認識されない

例えば、実行ファイルをstringとすると、ヘッダーファイルとして認識されてしまいます。解決方法は、既存のヘッダーファイルと別名にする。

参考

Web上の参考情報