我正在开发一个大型的c ++项目。我在过去的六个月里一直在使用emacs。 我尝试配置CEDET以便能够轻松导航,但我发现了一些问题。
1.-有时语义不会找到某些符号,有时候他不会...我不清楚哪些文件是语义索引。 我曾尝试使用EDE(按照本文http://alexott.net/en/writings/emacs-devenv/EmacsCedet.html中的说明),但我也发现了一些问题......
2.-我前段时间正在使用vim + cscope,我记得有一种方法可以在符号堆栈中导航回来(Ctrl-t)。在emacs中有这样的东西吗?
P.D.>一些数据使问题更加清晰。
我有同一个项目的多个版本。 每个人都有自己的根目录。 每个项目都有多个模块,每个模块都在一个子目录中。 每个模块都有头文件。
/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)。
答案 0 :(得分:2)
您的配置基本上是正确的,但项目的:include-path除外。
如果给定的源文件说:
#include "Module-001/subdir-002/header-003.h"
然后就可以了。如果包含说:
#include "subdir-002/header-003.h"
那么你的:include-path应该有
:include-path '("/Module-001" )
在其中。
至于哪些内容是语义索引,它将索引您当前的文件,以及它可以找到的所有包含。使用语义修饰模式查看EDE找到的标题,以确定您的配置是否准确。
它还将索引与您正在编辑的目录相同的目录中的所有文件,但仅限于空闲时间,因此如果您不让Emacs处于空闲状态,它将无法解决它。
如果你像Bozhidar建议的那样使用CScope,你可以加速索引操作。然后,您可以在EDE和语义数据库中启用CScope支持。然而,最近在语义数据库中包含CScope支持,因此您需要CVS版本的CEDET。这样可以确保整个事情都被编入索引。
要向后导航,请调查semantic-mru-bookmark-mode的帮助。这会在命名的位置基础上跟踪您的文件进度,这非常方便且始终有效。
答案 1 :(得分:0)
我曾经在使用Emacs Code Browser时使用过C ++项目并且我发现它非常令人满意 - 除了优秀的文件和代码结构导航之外,您还可以获得出色的VCS集成(根据当前的状态显示不同的图标)项目中的文件)。与ECB一起使用cscope作为Emacs,因为你在vim中提到过,你可能也想在Emacs中使用它。
或者,如果您想要更简单的解决方案,可以查看Emacs Nav。它也支持一些奇特的东西,并且不依赖于语义和速度条 - 你只需要使用etags / ctags来索引你的项目。