2010-09-24 54 views
7

我的emacs版本是23.2.1 儘管我使用以下內容來更改後端以使用GTAGS。我嘗試生成一個GTAGS文件(需要語義/數據庫全局) (semanticdb-enable-gnu-global-databases'c-mode) (semanticdb-enable-gnu-global-databases'C++ -mode) 我嘗試生成一個GTAGS文件用作語義的後端。但是,每當我打開一個C文件時,Semantic仍然在不使用GTAGS文件的情況下解析文件。如何使emacs語義使用由GTAGS生成的TAG文件

  1. 是否可以使用GTAGS文件而不是內置的語義分析器?我發現內置的解析器不是很準確。

  2. 是否可以在不指定項目範圍的情況下使用GTAGS文件?在我的情況下,我嘗試將GTAGS文件放在/ usr/include中,這應該是emacs的標準包含路徑。但是語義學並沒有使用它。

回答

7

語義不使用GTAGS文件來生成標籤,它將直接用於跳轉或智能完成等功能。 GNU Global後端到語義數據庫將使用GTAGS代替巨型名稱表。因此,如果您需要按名稱查找符號,GTAGS會將語義告訴它的位置,然後語義會更直接地解析這些文件以獲取詳細信息。

原因GTAGS不直接用作替換解析器是因爲GTAGS的信息不足以使各種操作語義的需要,因爲它不包括數據類型的信息,參數解析,以及當地的情況分析。

在/ usr/include中使用gtags是一個有趣的想法,但可能不會使用太多。語義只會搜索代碼中實際使用的頭文件,而不是搜索所有包含文件。 GNU Global後端專門用於掃描整個項目的符號或符號引用。如果你想搜索一個符號的所有包含,那麼這將是有用的,但是此時語義中沒有這樣的特徵。

可以使用ebrowse來做你想做的事情,但是我發現對於C++來說,解析器在微妙的方面是不夠的,並且導致了一些問題。

如果您認爲語義解析器不準確,那麼您應該將其作爲cedet-devel郵件列表中的錯誤發佈。