2010-09-24 4 views
7

Моя версия emacs - 23.2.1 Хотя я использовал следующее, чтобы изменить бэкэнд для использования GTAGS. (требуется 'semantic/db-global) (c-mode semanticdb-enable-gnu-global-databases) (semanticdb-enable-gnu-global-databases' C++-mode) Я попытался сгенерировать файл GTAGS для использования в качестве основы семантики. Однако каждый раз, когда я открываю файл C, Semantic все еще разбирает файлы, не используя файл GTAGS.Как сделать emacs Semantic использовать файл TAG, сгенерированный GTAGS

  1. Возможно ли использовать файл GTAGS вместо встроенного анализатора семантики? Я обнаружил, что встроенный парсер не очень точен.

  2. Возможно ли использовать файл GTAGS без указания области проекта? В моем случае я попытался поместить файл GTAGS в/usr/include, который должен быть стандартным, включать путь emacs. Но Семантика не использует его.

ответ

7

Semantic не использует файл GTAGS для генерации тегов, которые он будет использовать непосредственно для таких функций, как прыжки или умное завершение. GNU Global backend для семантического db будет использовать GTAGS вместо этого как гигантскую таблицу имен. Таким образом, если вам нужно найти символ по имени, GTAGS покажет семантику, где он есть, и Semantic затем проанализирует эти файлы непосредственно для получения деталей.

Причина, по которой GTAGS не используется непосредственно в качестве парсера замены, потому что информация в GTAGS недостаточна для видов операций. Семантические потребности, поскольку они исключают информацию о типе данных, синтаксический анализ аргументов и анализ локального контекста.

Использование gtags в/usr/include - интересная идея, но, вероятно, не будет использоваться. Semantic будет искать файлы заголовков, фактически используемые в вашем коде, вместо поиска всех включенных файлов. GNU Global backend предназначен специально для сканирования всего проекта для символа или ссылки на символы. Если вы хотите искать все свои символы для символа, тогда это было бы полезно, но в Semantic в данный момент нет такой возможности.

Возможно использовать ebrowse, чтобы делать то, что вы хотите, но я обнаружил, что для C++ анализатор был недостаточным тонким образом и вызвал некоторые проблемы.

Если вы считаете, что семантический парсер неточен, вы должны опубликовать его как ошибку в списке рассылки cedet-devel.