2010-09-24 16 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邮件列表中的错误发布。