7

我的 emacs 版本是 23.2.1 虽然我使用以下内容将后端更改为使用 GTAGS。(require 'semantic/db-global) (semanticdb-enable-gnu-global-databases 'c-mode) (semanticdb-enable-gnu-global-databases 'c++-mode) 我试图生成一个 GTAGS 文件用作语义的后端。但是,每次打开 C 文件时,Semantic 仍然在解析文件而不使用 GTAGS 文件。

  1. 是否可以使用 GTAGS 文件而不是内置的语义解析器?我发现内置的解析器不是很准确。

  2. 是否可以在不指定项目范围的情况下使用 GTAGS 文件?就我而言,我尝试将 GTAGS 文件放在 /usr/include 中,这应该是 emacs 的标准包含路径。但是语义没有使用它。

4

1 回答 1

8

Semantic 不使用 GTAGS 文件来生成将直接用于跳转或智能完成等功能的标签。语义数据库的 GNU 全局后端将使用 GTAGS 作为一个巨大的名称表。因此,如果您需要按名称查找符号,GTAGS 将告诉语义它在哪里,然后语义将更直接地解析这些文件以获取详细信息。

之所以不直接将 GTAGS 用作替代解析器,是因为 GTAGS 中的信息不足以满足语义所需的各种操作,因为它不包括数据类型信息、参数解析和本地上下文解析。

在 /usr/include 中使用 gtags 是一个有趣的想法,但可能不会被太多使用。Semantic 只会搜索代码中实际使用的头文件,而不是搜索所有包含文件。GNU Global 后端专门用于扫描整个项目以查找符号或符号引用。如果您想在所有包含中搜索符号,那么它会很有用,但目前 Semantic 中没有这样的功能。

可以使用 ebrowse 来做你想做的事,但是我发现对于 C++,解析器在微妙的方面是不够的,并导致了一些问题。

如果您认为语义解析器不准确,那么您应该将其作为错误发布在 cedet-devel 邮件列表中。

于 2010-09-27T23:54:57.347 回答