web-dev-qa-db-ja.com

大規模なC ++プロジェクトのIDEとしてのEmacs

私はEmacsの初心者です。大規模なC++プロジェクトで使用するためにEmacsを使用して、特にコードのインデックス作成と関数名のオートコンプリートを行い、Eclipseのように動作する方法を検索する必要があります。私はしばらくの間Vimを使用していて、プロジェクトのコードにインデックスを付けるためにctagsを使用し、Vimはオプションのドロップダウンメニューを使用してコードをオートコンプリートしようとしていました。私は今Emacsで同じことを達成しようとしています。しかし、私の検索中に、結果はCEDET、オートコンプリート、およびその他のサードパーティのプラグインを示していました。

ctags -e -R .とetagsでctagsを使おうとしましたが、成功しませんでした。

同じ動作を実現するためのEmacsのデフォルトの方法がありませんか?私が望むことを達成するための最良かつ最も簡単な方法はどれですか?

21
lordlabakdas

オートコンプリートでCEDETを正常に使用しています。基本的に、オートコンプリートはドロップダウンボックスプロバイダーであり、さまざまなものからソースを取得します。最も興味深いのは、CEDETからです(etagsやGnu Globalからも取得します。これもお勧めします)。

CEDETの良い出発点は http://alexott.net/en/writings/emacs-devenv/EmacsCedet.html

Alex Ottのemacs構成は次のとおりです: https://github.com/alexott/emacs-configs -これは便利なリソースです。

BzrからCEDETを取得し、オートコンプリートを正しくインストール/構成する必要があることに注意してください。 el-getにオートコンプリート(およびその他の機能も)をインストールすることを強くお勧めします。構造化EDEプロジェクトの一部ではないランダムなC/C++ファイルに対してオートコンプリートが機能するようにするには、EDEの汎用プロジェクトを設定する必要があります。

Emacsを設定するのに少し時間を費やす必要がありますが、それは報われます。このツールは、正しく設定すると驚くほど生産性が高くなります。

16
Alexandre C.

インデックス作成

Ctagsの代わりに GNU/global を使用することをお勧めします。これはC++をサポートし、大規模なプロジェクトではより効率的だと思います(特に、インデックスを最初から再構築する代わりに更新できるため)。そして、そのCEDET /セマンティックを使用する方がはるかに簡単です(これは、セットアップに時間を費やす場合にも素晴らしいツールです)。

使用例:

$ cd sources
$ gtags -v         # create the index
$ cd subdirectory
$ [hack hack hack]
$ global -u        # update the index (can be called from anywhere in the project)

Emacsで、ソースコードバッファのgtags-modeをアクティブにして、gtagsコマンドにアクセスします。

  • gtags-find-tagM-.):ソースファイルで指定されたタグの定義を検索します(gtagsを使用すると、可能な定義が複数ある場合はすべてから選択でき、可能性が1つしかない場合は直接ジャンプできます)
  • gtags-pop-stackM-*):前の場所に戻る
  • gtags-find-rtag:ソースファイルで指定されたタグのすべての使用法を検索します

以下は、gtagsの構成です。これは、インデックスが見つかった場合にgtags-modeを自動的にアクティブにします。

;; gtags-mode
(eval-after-load "gtags"
  '(progn
     (define-key gtags-mode-map (kbd "M-,") 'gtags-find-rtag)))
(defun ff/turn-on-gtags ()
  "Turn `gtags-mode' on if a global tags file has been generated.

This function asynchronously runs 'global -u' to update global
tags. When the command successfully returns, `gtags-mode' is
turned on."
  (interactive)
  (let ((process (start-process "global -u"
                                "*global output*"
                                "global" "-u"))
        (buffer  (current-buffer)))
    (set-process-sentinel
     process
     `(lambda (process event)
        (when (and (eq (process-status process) 'exit)
                   (eq (process-exit-status process) 0))
          (with-current-buffer ,buffer
            (message "Activating gtags-mode")
            (gtags-mode 1)))))))

(add-hook 'c-mode-common-hook 'ff/turn-on-gtags)

自動完了

auto-complete よりも優れたツールはありません。 Emacsに含まれていない場合でも、パッケージングシステムを使用して非常に簡単にインストールできます(たとえば、 marmalade または melpa リポジトリ)。

11

IDEで何を探しているかによって異なります。私はかなり大規模なC++プロジェクトにEmacsを使用しています。もちろん、他のIDEと同じように機能するように、emacsを構成する必要があります。

しかし、そうです、CEDETは完璧ではありませんが、スタートです。

ただし、Emacsには非常に優れたオートコンプリートモードがあります http://cx4a.org/software/auto-complete/ それはインテリセンスではありませんが、何らかの方法でCEDETと統合して、運命を与える必要があります。良好なオートコンプリート。

私がよく使用するもう1つの重要な機能は、ヘッダーファイルと実装ファイルから簡単にジャンプできる関数ff-find-other-fileです。

そしてもちろん、あなたはあなた自身の建物を転がす必要があります。 CEDETはプロジェクトをある程度サポートしていますが、私はテストしていません。ただし、Emacsはmakeなどのコマンドラインビルドツールとうまく統合できます。エラーはバッファに出力され、Emacs内で簡単に正しい行にジャンプできます。

GDBはEmacsM-x gdbともうまく統合されているので、gdb-many-windowsコマンドを覚えておいてください。

6
AxelOmega

CppCon2015でのAtilaNevesのライトニングトーク「 C++ IDEとしてのEmacs 」をご覧になることをお勧めします。

詳細については、 この関連する質問 に対する私の回答を参照してください。

2
Philipp Claßen

https://emacs.stackexchange.com/questions/26518/sequence-of-packages-to-be-installed-to-make-emacs-an-ide-for-c-c を参照してください

私はGNUグローバルプラグインと2つの人気のあるEmacsプラグインを使用しています:

  • コード補完のための会社

  • コードナビゲーション用のemacs-helm-gtags

1
chen bin