2017-02-09 40 views
1

后读了堪称伟大的文章“一个温柔的介绍CEDET”的书面亚历克斯·奥特。我做了一些实验用于C++项目在我的Emacs 24.3和“https://git.code.sf.net/p/cedet/git”(也emacs的23.1和稳定cedet1.1)最新CEDET。除了“semantic-analysis-proto-impl-toggle”中的一个小小的“跳到功能实现”问题外,我对此非常满意。 我的项目是非常简单(只有2个文件):在DIRemacs的CEDET“语义分析,原IMPL拨动”不能跳转到适当的工具

1)头文件 “y.hpp” “〜/ emacs的/测试/ ZZ1 /”

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

2)实现文件“Y的.cpp”,在目录 “〜/ emacs的/测试/ zz2所示/”

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

我CEDET配置是基于亚历克斯OOT的 “minimial-CEDET-config.el”(https://gist.github.com/alexott/3930120)和只添加以下两行:

(语义附加系统包括 “〜/ emacs的/测试/ ZZ1 /”“C++ - 模式)

(语义附加系统包括 “〜/ emacs的/测试/ ZZ2 /” “C++ - 模式)

我检查我的语义数据库高速缓存,发现所有的数据库文件被正确地创建, 这是缓存DB部分信息为y.hpp在ZZ1:

("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的缓存数据库中的信息:

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

回答

1

后,我从埃里克·Ludlam得到了建议。我相信问题是,语义不知道这两个文件 属于同一个项目。系统头部技巧可能有助于一个 方向但不是双向。

教它,它属于在同一个项目的方式是使 EDE,然后确保有一个EDE项目出现,比如使用 “义德-CPP-root”的项目类型,就像这样:

;;确保FNAME存在**

(EDE-CPP-根工程 “TEST”:文件 “〜/ emacs的/测试/ FNAME” :包括路径“( “/ ZZ1” “/ zz2所示”))

既然你已经有

(EDE - 启用 - 通用项目)

你也可以只是把粘在混帐或CVS的一切,它会 发现它作为一个项目。然后自定义项目并添加包含路径 以确保它可以找到所有内容。

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

我们不需要以下两行了:

(语义的附加系统,包括 “〜/ emacs的/测试/ ZZ1 /”“C++ - 模式)

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