emacs cedet" semantic-analyze-proto-impl-toggle"无法跳转到合适的工具

时间:2017-02-09 16:00:05

标签: emacs cedet

阅读了一篇名为" CEDET的温和介绍"由Alex Ott撰写的。我在我的emacs 24.3中进行了一些c ++项目的实验,并在" https://git.code.sf.net/p/cedet/git"中进行了最新的cedet实验。 (也在emacs 23.1和稳定的cedet1.1中)。我很满意它,除了一个小的"跳转到功能工具" " semantic-analyze-proto-impl-toggle"中的问题。  我的项目很简单(只有2个文件):

1)头文件" y.hpp"在dir"〜/ emacs / test / zz1 /"

  class y{
     public:
       int y1(int);//error here! semantic can't found implement in y.cpp
};

2)实施文件" y.cpp"在dir"〜/ emacs / test / zz2 /"

   #include "y.hpp"
   int y::y1(int b) // semantic can found definition in y.hpp
    {
     return 0;
    }

我的cedet配置基于alex oot" minimial-cedet-config.el "(https://gist.github.com/alexott/3930120)并且只添加以下两个行:

(semantic-add-system-include"〜/ emacs / test / zz1 /"' c ++ - mode)

(semantic-add-system-include"〜/ emacs / test / zz2 /"' c ++ - mode)

我检查了我的语义数据库缓存,发现所有数据库文件都正确创建, 这是zz1中的y.hpp的缓存db中的部分信息:

  ("y1" function
                       (:prototype-flag t
                        :arguments 
                          ( ("" variable (:type "int") (reparse-symbol arg-sub-list) [27 31]))                          
                        :type "int")
                        (reparse-symbol classsubparts) [20 32])

这是zz2中y.cpp的缓存db中的部分信息:

("y1" function
               (:parent "y"
                :arguments 
                  ( ("b" variable (:type "int") (reparse-symbol arg-sub-list) [28 34]))                  
                :type "int")
                nil [18 50])

1 个答案:

答案 0 :(得分:1)

我得到了 Eric Ludlam的建议。我认为问题是Semantic不知道这两个文件 属于同一个项目。系统标题技巧可能有助于一个 方向,但不是双向的。

教它属于同一个项目的方法是启用它 EDE,然后确保那里有一个EDE项目,比如使用 'ede-cpp-root'项目类型,如下所示:

  

;;确保fname存在**

     

(ede-cpp-root-project“TEST”:文件“〜/ emacs / test / fname”                          :include-path'(“/ zz1”“/ zz2”))

既然你已经有了

<强>(EDE启用泛型的项目)

你也可以把一切都放在git或CVS中,它会 发现它是一个项目。然后自定义项目并添加包含路径 确保它能找到所有东西。

一旦开始使用EDE项目来指定项目根,语义 将为其导航和完成系统提供更好的支持。

我们不再需要关注两行:

  

(semantic-add-system-include“〜/ emacs / test / zz1 /”'c ++ - mode)

     

(semantic-add-system-include“〜/ emacs / test / zz2 /”'c ++ - mode)