【问题标题】:How to make emacs Semantic use the TAG file generated by GTAGS如何让emacs Semantic使用GTAGS生成的TAG文件
【发布时间】:2011-04-17 00:55:11
【问题描述】:
我的 emacs 版本是 23.2.1
尽管我使用以下内容将后端更改为使用 GTAGS。
(需要'语义/数据库全局)
(semanticdb-enable-gnu-global-databases 'c-mode)
(semanticdb-enable-gnu-global-databases 'c++-mode)
我试图生成一个 GTAGS 文件用作语义的后端。
但是,每次打开 C 文件时,Semantic 仍然在解析文件而不使用 GTAGS 文件。
是否可以使用 GTAGS 文件代替内置的语义解析器?我发现内置的解析器不是很准确。
是否可以在不指定项目范围的情况下使用 GTAGS 文件?就我而言,我尝试将 GTAGS 文件放在 /usr/include 中,这应该是 emacs 的标准包含路径。但是 Semantics 没有使用它。
【问题讨论】:
标签:
emacs
cedet
emacs-semantic
gnu-global
【解决方案1】:
Semantic 不使用 GTAGS 文件来生成将直接用于跳转或智能完成等功能的标签。语义数据库的 GNU 全局后端将使用 GTAGS 作为一个巨大的名称表。因此,如果您需要按名称查找符号,GTAGS 将告诉语义它在哪里,然后语义将更直接地解析这些文件以获取详细信息。
之所以不直接将 GTAGS 用作替代解析器,是因为 GTAGS 中的信息不足以满足语义所需的各种操作,因为它不包括数据类型信息、参数解析和本地上下文解析。
在 /usr/include 中使用 gtags 是一个有趣的想法,但可能不会被广泛使用。 Semantic 只会搜索代码中实际使用的头文件,而不是搜索所有包含文件。 GNU Global 后端专门用于扫描整个项目以查找符号或符号引用。如果您想在所有包含中搜索符号,那么它会很有用,但目前 Semantic 中没有这样的功能。
可以使用ebrowse来做你想做的事,但是我发现对于C++来说,解析器在细微的地方是不够的,并且导致了一些问题。
如果您认为语义解析器不准确,那么您应该将其作为错误发布在 cedet-devel 邮件列表中。