6

大規模な C++ プロジェクトに取り組んでいます。過去6か月間、emacsを使用しています。簡単にナビゲートできるように CEDET を構成しようとしましたが、いくつかの問題が見つかりました。

1.- セマンティックがいくつかのシンボルを見つけられない場合もあれば、そうでない場合もあります...どのファイルがセマンティックインデックス付けされているかはっきりわかりません。EDE を使用しようとしました (このペーパーhttp://alexott.net/en/writings/emacs-devenv/EmacsCedet.htmlの指示に従って) が、いくつかの問題も見つかりました...

  • 同じプロジェクトの複数のバージョン (リリース) があり、それぞれが独自のフォルダーにあります。どのプロジェクトで作業しているかをemacsに伝えるにはどうすればよいですか?
  • ede にヘッダー ファイルの検索場所を指定するにはどうすればよいですか? ルート ディレクトリだけを指定すると、セマンティックはすべてのサブディレクトリでヘッダー ファイルを検索しますか?

2.- しばらく前に vim+cscope を使用していましたが、シンボルのスタックに戻る方法があったことを覚えています (Ctrl-t)。emacs にこのようなものはありますか?

PD> 質問をより明確にするためのいくつかのデータ。

同じプロジェクトの複数のリリースがあります。それぞれに独自のルート ディレクトリがあります。各プロジェクトには、サブディレクトリ内にそれぞれ複数のモジュールがあります。各モジュールにはヘッダファイルがあります。

/home/user/
          |
           \Release-001
          |           |
          |            \makefile
          |            \ Module-001
          |           |           |
          |           |            \makefile
          |           |            \subdir-001
          |           |           |          \header-001.h
          |           |           |          \header-002.h
          |           |            \subdir-002
          |           |           |          \header-003.h
          |            \ Module-002
          |           |           |
          |           |            \makefile
          |           |            \subdir-003
          |           |           |          \header-004.h
          |           |           |          \header-005.h
          |           |            \subdir-004
          |           |           |          \header-006.h
          |
           \Release-002
          |           |
          |            \makefile
          |            \ Module-001
          |           |           |
          |           |            \makefile
          |           |            \subdir-001
          |           |           |          \header-001.h
          |           |           |          \header-002.h
          |           |            \subdir-002
          |           |           |          \header-003.h
          |            \ Module-002
          |           |           |
          |           |            \makefile
          |           |            \subdir-003
          |           |           |          \header-004.h
          |           |           |          \header-005.h
          |           |            \subdir-004
          |           |           |          \header-006.h

これは、.emacs にある EDE に関する構成です。

;; Cedet load commands
(add-to-list 'load-path "~/emacs-dir/cedet/cedet")
(load-file "~/emacs-dir/cedet/cedet/common/cedet.el") 

;; EDE: activating mode.
(global-ede-mode t)

;; Projects definition
(ede-cpp-root-project "Release-001"
                     :name "Release-001"
                     :file "~/Release-001/makefile"
                     :include-path '("/"
                                     )
                     :system-include-path '("~/exp/include")
                     :spp-table '(("SUSE9" . "")
                                )
)
(ede-cpp-root-project "Release-002"
                     :name "Release-002"
                     :file "~/Release-002/makefile"
                     :include-path '("/"
                                     )
                     :system-include-path '("~/exp/include")
                     :spp-table '(("SUSE9" . "")
                                )
)

お知らせします...私はemacsのコンソールバージョン(-nw)を使用しています。

4

2 に答える 2

2

プロジェクトの :include-path を除いて、構成は基本的に正しいです。

特定のソース ファイルに次のように記載されている場合:

   #include "Module-001/subdir-002/header-003.h"

それなら大丈夫です。インクルードに次のように記載されている場合:

   #include "subdir-002/header-003.h"

あなたの :include-path は

   :include-path '("/Module-001" )

初期化。

セマンティック インデックスを実行するものについては、現在のファイルにインデックスを付け、すべてのインクルードを検索できます。セマンティック装飾モードを使用して、EDE が検出したヘッダーを確認し、構成が正確かどうかを判断します。

また、編集中のディレクトリと同じディレクトリにあるすべてのファイルのインデックスを作成しますが、これはアイドル時にのみ行われます。

Bozhidar が提案するように CScope を使用すると、インデックス作成操作を高速化できます。その後、EDE とセマンティック データベースの両方で CScope サポートを有効にできます。ただし、セマンティック DB に CScope サポートが組み込まれたのは最近のことなので、CEDET の CVS バージョンが必要になります。これにより、すべてがインデックス化されていることが確認されます。

前に戻るには、semantic-mru-bookmark-mode のヘルプを調べてください。これは、非常に便利で常に機能する、名前付きの場所に基づいてファイルの進行状況を追跡します。

于 2010-08-19T22:18:19.410 に答える
0

私は以前、 C++ プロジェクトで作業するときにEmacs Code Browserを使用していましたが、非常に満足のいくものであることがわかりました。優れたファイルとコード構造のナビゲーションに加えて、優れた VCS 統合 (プロジェクト内のファイルの現在の状態に応じて異なるアイコン) が得られます。 )。ECB と組み合わせて、Emacs に cscope を使用しました。vim について言及したので、おそらく Emacs でも使用したいと思うでしょう。

または、より簡単なソリューションが必要な場合は、Emacs Navをご覧ください。いくつかの凝ったものもサポートしており、セマンティックやスピードバーには依存しません。プロジェクトのインデックスを作成するために etags/ctags を使用するだけで済みます。

于 2010-08-19T21:01:33.980 に答える