ぬうぱんの備忘録

技術系のメモとかいろいろ

作った曲一覧はこちら

ubuntuにeclipse CDTを導入

動機とか

 g++とemacsC++コード組んでたけど、リファクタリングが無い! って所で乗り換えを決意。なんだかんだで生産性ほしかったらIDEに落ち着くんですかね。
 CUI環境でアレだけの機能使えるのはメリットだと思うので、二度と使わないって言うことは無いと思いますけど、メインで使う開発環境はeclipse CDTにお引越し。

Eclipse CDTって何?

 Eclipse統合開発環境(IDE)というヤツで、いろんな言語のプログラミングを強力にサポートしてくれる。
 CDTはC/C++ Development Toolingの略で、EclipseC/C++の開発に対応させるためのプラグイン
 この二つのプラグインがあればとりあえずC/C++での開発ができるという事。

バージョンとか環境

eclipse CDTをインストールと起動

 端末で次のコマンド打ち込むだけ。日本語化は面倒なのでパス。

sudo apt-get install eclipse-cdt

 依存パッケージが多いので、インストールには少し時間がかかるかも。インストールが終わったら、Dashからでもeclipseを起動。
 起動したらワークスペースどこにするか聞かれるので、適当なフォルダを選択。僕の場合はすでにワークスペースとして使ってたディレクトリがあるのでそれを選択して、変えることもないだろうから、二度と聞かないみたいなのにチェック入れてOK。
 とりあえずここらで適当にプロジェクトを作ってコンパイルできるか確かめておきましょう。プロジェクトも種類がいろいろありますが

を選べばとりあえずよさげ。
 あとは適当にファイル追加してHello world!でも書いてビルドして実行してみましょう。
 こっから先は別個のhow toみたいな感じで進めてきます。

eclipseのディレクトリ構成

 eclipse CDTは基本的に

  • .cproject
  • .project

の二つでプロジェクトの情報を管理し、ソースコードはsrcディレクトリ内に格納するようです。

gitと連携させたい

 他にしたいことはいろいろありますが、下準備としてはまずこれ。いろいろ作業するのにミスっても巻き戻せると便利。
とりあえず以下のコマンド

sudo apt-get install eclipse-egit

これだけでインストール完了。

プロジェクトからリポジトリを作成したい

リポジトリ1プロジェクトの関係の場合

 プロジェクトエクスプローラー内の任意のプロジェクトを右クリックして"Team -> Share Project..."。使用する管理システムにGitを選択したあと、"Configure Git Repository"画面が出てきますが"Use or create repository in parent folder of project"にチェック。Create Reposetoryをクリックすれば、プロジェクトのディレクトリに.gitディレクトリが作成される。

リポジトリ多プロジェクトの場合

 "Use or create..."のチェックを入れると推奨しません的な警告が表示されますが、理由は"1つのリポジトリ複数のプロジェクトを入れたい場合に困るから"のようです。
 もし、複数のプロジェクトを1つのリポジトリに含めたい場合は、Create...でリポジトリを作成してから、含めたいリポジトリを選択する必要があるみたいです。2つめ以降のプロジェクトは最初に生成したリポジトリを選択するだけでOKです。この場合、プロジェクトのディレクトリはリポジトリのディレクトリ直下に移動します。
 もし既存のリポジトリにプロジェクトを追加したい場合は"Git Repositories"パースペクティブリポジトリを追加しておく必要があります。

http://gihyo.jp/admin/serial/01/ubuntu-recipe/0222
http://d.hatena.ne.jp/ishibashits/20110627/1309193856

git操作をeclipse上で行う

 Project Explorer上でプロジェクトを右クリックしてTeamから操作を行うことができます。簡単な操作はここからおこなって、細かい操作は端末からやったほうがいいかもしれません。

既存のmakeプロジェクトをeclipseに取り込む

 gitの環境が整ったら次は既存コードをeclipseに取り込みます。ここでは、Makefile書いてあって端末でmakeするだけでコンパイルできるようになってるプロジェクトをeclipseに取り込むことを想定します。
 メニューの"File -> Import..."をクリック。
 何を取り込むか選択しろって出るので"C/C++ -> Existing Code as Makefile Project"でNext>をクリック。
 取り込みたいディレクトリを選択する。プロジェクト名もデフォルトで問題無いでしょう。LanguagesはとりあえずC++だけで。"Toolchain for Indexer Settings"はとりあえずLinux GCCで。
 Finishでインポート完了。

 一応インポートしたプロジェクトがビルドできるかチェックしましょう。
 この方法でインポートしたプロジェクトはビルド時に自動でMakefileを生成しません。そのため、ファイルを追加した場合はMakefileを書き加える必要がありますが、IDEを使えない環境との互換性が残ります。
 それ以外でも、GUIでちまちま設定するよりMakefile書いちゃった方が気楽かもしれません。

インクルードパスとかライブラリパスとかの話

 ここで大ハマリしました。結局どういうことなのかと。
 eclipseに既存のMakeプロジェクトをを導入すると、とりあえずビルドはできるかと思います。そりゃMakefileに必要な情報乗ってますから。しかし疑問になってくるのはMakefileにしか書かれていないインクルードパスをどうやってCDTのインデクサーに知らせるのか、という話。実際、インポート直後に適当なソース開くとデフォルトでないライブラリのヘッダが見つからなくてエラーという扱いになっています。はて・・・?
 ここでいろいろ苦労したんですが、結論としてはディスカバーの見つけた情報を使ってインデクサーがヘッダを見つけて解析してくれる、ってことみたいです。順を追って説明すると

  • プロジェクトをビルドする
  • この時Makefileで"-I"で指定されたインクルードディレクトリがプロジェクトの"Includes"に追加される。
  • この必要そうな情報を勝手に拾ってきてくれるのはディスカバリー機能と言うそう。考えた人マジすごい。
  • ディスカバリー機能が拾ってきた情報やらビルトインの情報やらを利用してソースコードのインデックス情報を生成する。
  • インデックス情報を利用してソースコードの構文チェックやら自動補完が行われる。
  • このインデックス情報を生成するヤツをインデクサーという。

この手順を踏むことでMakefileに書いてある情報がeclipseプロジェクトに反映されるみたいです。
 ディスカバリーとインデクサーが働かないと構文チェックなんかで見に覚えのないエラーが発生したりするみたいです。なので、Makefileにちゃんとパス書いたのにインクルードファイルが反応しない・・・なんて人は次のことを試してみましょう。

  • プロジェクトをビルドしなおしてパスをディスカバリーに発見させる。
  • プロジェクトを右クリックして"Indexer -> Rebuild"とか"Indexer -> Freshen All Files"あたりを動かして更新された情報を読ませてインデックスを再生成させる。Rebuildは一からインデックスを生成しなおして、Freshenはインデックスを更新するようなので、とりあえずRebuildしとけば安全みたい。

http://shiromanano.blog94.fc2.com/blog-entry-456.html

コード補完を使いたい

 さて、前項でインデックサーが働いていればコード補完が使いたい放題です。やったね!
補完についてはいろいろありますが、説明が必要なのは"Alt+/でメンバ名とかを補完してくれる"くらいでしょうか。メンバ名の自動解決とかは使ってれば勝手に出てくるでしょう。

デバッガ使うときの注意

 デバッガを使うときコンパイルオプションに"-g"と"-O0"を付けておかないとアセンブラのコードしか見れなくて悲しい目に会います。前者はデバッグ情報の付与、後者は最適化の無効化です。

とりあえずこの程度?

 このくらいやっとけばとりあえずストレスなくEclipse CDTを使えそうです。
 にしてもディスカバリー考えた人マジですごい。アレのおかげでMakeプロジェクト兼Eclipseプロジェクト兼VisualStudioプロジェクトなんてマネができちゃう。しかもMakeプロジェクトとEclipseプロジェクトが必要な情報を共有できるってのが素晴らしい。