GNU Global和GTAGS找不到类定义

Out*_*emo 5 tags gnu gnu-global

我在查找类/结构定义时遇到全局问题.我可以用丰富的ctags和cscope找到它们.所有标记文件都是从同一源文件列表构建的.我配置并构建了global,et.al.,只指定了--prefix.configure确实找到了exhuberant并正在使用它.多年来我一直在定期尝试全球化,而且总是遇到这个问题.有任何想法吗?

谢谢,戴维

小智 8

只需导出这个变量就可以了.从手册页gtags-

GTAGSFORCECPP If this variable is set, each file whose suffix is 'h' is treated as a C++ source file.


Out*_*emo 7

我发现了我做错了什么.也许这会对某人有所帮助.

  1. 仅仅因为configure找到了旺盛的ctags并不意味着它使它成为默认的解析器.我的ex ctags不支持--gtags,也许这就是原因.在我的情况下,默认的解析器是native/builtin.
  2. 本机解析器仅将.h视为C并且不查找C++构造.奇怪的是,它也没有找到结构.

我找到了2个修复:

1)最好的,如果你有丰富的ctags,是默认的.充满活力的默认配置正确处理.h文件.如果没有,请使用方法2.在.globalrc中,更改

default:\   
  :tc=native:

to 

default:\   
  :tc=ctags:
Run Code Online (Sandbox Code Playgroud)

2)如果你没有充满活力的ctags,请编辑.globalrc并更改内置解析器的langmap行

builtin-parser:\
 :langmap=c\:.c.h,yacc\:.y,asm\:.s.S,java\:.java,cpp\:.c++.cc.hh.cpp.cxx.hxx.hpp.C.H,php\:.php.php3.phtml:

to

builtin-parser:\
 :langmap=c\:.c,yacc\:.y,asm\:.s.S,java\:.java,cpp\:.c++.cc.hh.h.cpp.cxx.hxx.hpp.C.H,php\:.php.php3.phtml:
Run Code Online (Sandbox Code Playgroud)

即删除.h与C的关联并将其与C++关联.这可能会导致C .h文件出现问题.如果是这样,您可能需要将所有 C++ .h文件重命名为.hh,.hpp,.hxx等,如langmap中所示.

根据我使用C++的经验,看起来大多数人仍然使用.h作为头文件.