GNU Global и GTAGS не могут найти определения классов
У меня возникают проблемы с получением глобального определения классов / структур. Я могу найти их с обильными ctags и cscope. Все файлы тегов создаются из одного и того же списка исходных файлов. Я настроил и собрал global, et.al., только указав --prefix. configure нашел exhuberant и использует его. Я периодически пробовал глобальные попытки, и у меня всегда была эта проблема. Есть идеи?
спасибо, давеп
2 ответа
Просто экспортируйте эту переменную, и это должно сработать. Со страницы руководства для gtags
-
GTAGSFORCECPP
If this variable is set, each file whose suffix is 'h' is treated as a C++ source file.
Я узнал, что я сделал не так. Может быть, это кому-то поможет.
- Тот факт, что configure находит обильные ctags, не означает, что он делает это парсером по умолчанию. Мой бывший ctags не поддерживает --gtags и, может быть, поэтому. Парсер по умолчанию в моем случае был native/builtin.
- Собственный парсер обрабатывает.h только как C и не ищет конструкции C++. Как ни странно, он также не находит структур.
Я нашел 2 исправления:
1) Лучше всего, если у вас есть обильные ctags, это сделать его по умолчанию. Обильная конфигурация по умолчанию обрабатывает файлы.h правильно. Если это не так, используйте метод 2. В.globalrc измените
default:\
:tc=native:
to
default:\
:tc=ctags:
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:
Т.е. удалить ассоциацию.h с C и связать ее с C++. Это может вызвать проблемы с файлами C .h. Если это так, вам может понадобиться переименовать ВСЕ файлы C++ .h в.hh, .hpp, .hxx и т. Д., Как указано в langmap.
Исходя из моего опыта работы с C++, похоже, что большинство людей все еще используют.h для своих заголовочных файлов.