Emacs的/ CEDET。多个项目和代码完成

时间:2010-10-20 11:44:26

标签: emacs cscope cedet emacs-semantic

我已经使用CEDET 1.0和ECB 2.40设置了emacs 23.1.50.1(受到http://github.com/alexott/emacs-configs/blob/master/rc/emacs-rc-cedet.el的Alex Otts设置以及他对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的后端。我可以在没有emacs抛出任何错误的情况下运行semanticdb-enable-cscope-in​​-buffer,但我不知道语义是否使用了我的数据库。我是否可以在项目定义中添加对cscope.out的引用,以便更好地控制在当前上下文中搜索引用的文件?

有几个奇怪之处:<​​/ p>

当我尝试打开一个新的源文件时,我收到错误“apply:Searching for program:no such file or directory,global”,没有任何反应。如果我再试一次,一切都很好。

当我尝试通过指向锚文件加载项目时,我收到此错误:“if:Wrong type argument:class-p,ede-cpp-root”

1 个答案:

答案 0 :(得分:5)

当您的配置出现错误时,最好的办法是:

M-x toggle-debug-on-error RET

并获得指向问题区域的堆栈跟踪。通常有助于识别配置问题。

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

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

M-x semantic-c-describe-environment RET

这应该显示Semantic将尝试使用的内容。

要仔细检查CScope是否用于代码完成,您可以查看:

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

并检查列表末尾的某些CScope事物。