2017-02-09 62 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)