Emacs/CEDET. 多项目和代码补全

8
我已经安装了版本为23.1.50.1的Emacs,同时搭配了1.0版CEDET和2.40版ECB(Alex Ott在http://github.com/alexott/emacs-configs/blob/master/rc/emacs-rc-cedet.el上对此作了重要启示,并向我们介绍了Cedet ( http://alexott.net/en/writings/emacs-devenv/EmacsCedet.html ) ,谢谢Alex)。它运行得非常好,但是当使用多个项目时,我需要更多关于代码补全和符号引用处理的理解。
我创建了一个简单的ede项目,像这样:
(ede-cpp-root-project "test"
                      :file "~/src/sw/anchor"
                      :include-path '("/Common")
                      :system-include-path '("~/include"))

当加载此项目时,Semantic是否只会在项目配置中指定的各个目录中寻找补全?
我按照http://mmmyddd.freeshell.net/blog/Computer/Emacs/usecscopesemanticdbbackend的方法使用cscope作为semanticdb的后端。我可以运行semanticdb-enable-cscope-in-buffer而不会出现任何错误,但我不知道semantic是否使用了我的数据库。我能否在我的项目定义中添加对cscope.out的引用,以便更好地控制在当前上下文中搜索哪些文件进行引用?
还有一些奇怪的事情:
当我尝试打开一个新的源文件时,我会收到错误消息“apply: Searching for program: no such file or directory, global”,然后什么也不会发生。如果我再次尝试打开它,一切都正常。
当我尝试通过指向锚点文件来加载项目时,我会收到此错误消息:“if: Wrong type argument: class-p, ede-cpp-root”。

针对“apply: Searching for program: no such file or directory, global”错误,您是否复制了Alex Ott设置中使用的“(semanticdb-enable-gnu-global-databases ...)”部分? - Dingo
我已经这样做了,但我怀疑我不需要它。它说“gnu全局支持”,这应该让我怀疑问题出在那里:)谢谢。 - anr78
1个回答

5
当您的配置出现错误时,最好的做法是:
M-x toggle-debug-on-error RET

获取堆栈跟踪,可以指向问题区域。这通常有助于识别配置问题。

CEDET将尝试将每个文件与单个项目相关联,并且在该缓冲区中操作的所有命令都将限制在该项目的范围内。对于CScope支持,它也将使用EDE来标识根目录,这将有助于找到cscope.out文件,并且与完成和引用工具相关。

当然,例外是系统包含路径,通常为/usr/include或其他路径。这是对默认系统包含路径的增强,其使用GCC支持进行计算。在您的一个C文件中,您可以执行以下操作:

M-x semantic-c-describe-environment RET

这应该展示了语义化将尝试使用的内容。

为了确保CScope被用于代码补全,您可以检查:

M-x semanticdb-find-test-translate-path RET

并检查列表末尾的一些CScope内容。

谢谢Eric,感谢您的回答和提供的软件。这些命令确实非常有用。目前,semantic-c-describe-environment对cscope没有任何说明,而semanticdb-find-test-translate-path则显示:*#<semanticdb-table-cscope Cscope Search Table(0个标签)>。 - anr78
没错,cscope支持不会费心计算CScope知道的标签数量,而且它并不是“项目”的一部分,因为内部已经抽象化了,所以C环境并不知道它。 - Eric

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接