Можно ли заставить ctags следовать директивам #include? - PullRequest
4 голосов
/ 21 октября 2011

Я пытаюсь создать цель в своем Makefile для автоматического создания файла tags с использованием ctags.

У меня есть список исходных файлов (файлы .cpp), но у меня нет списка всех файлов заголовков (я использую g++ -MM для создания списка зависимостей заголовков).

Я бы предположил, что ctags будет следовать любым директивам #include в файлах .cpp при создании тегов, но, похоже, мое предположение неверно.

Если я создам простой файл тегов, подобный этому:

ctags  --fields=+iaS --extra=+q myClass.cpp

, а затем войдите в vim и введите имя объекта, за которым следует '.' Я получаю сообщение об ошибке "Шаблон не найден".

Однако, если я скомпилирую файл тегов так:

ctags  --fields=+iaS --extra=+q myClass.cpp myClass.h

и сделать то же самое в vim, я получаю прекрасный автоматически заполненный список переменных / функций-членов.

Первая строка в моем файле myClass.cpp:

#include "myClass.h"

Так почему же ctags не использует это для анализа заголовочного файла?

1 Ответ

6 голосов
/ 21 октября 2011

Нету.к сожалению / к счастью.

Не было бы слишком много проблем после ваших собственных включений.Проблема начинается с

  • условной компиляции
  • внешних (системных) библиотек.

К счастью, проблему с вашими собственными библиотеками легко решить, если что-то сделатькак

ctags *.h *.cpp
ctags -R src/

Вы можете взломать что-нибудь вместе с cpp, а затем ctags.Это не будет работать удобно.Полуинтересным подходом было бы исправление ctags, чтобы они следовали #line прагме в выводе cpp и, следовательно, связывали все теги с их соответствующими источниками.

Однако этот подход не работает так, как вы ожидаете для любых символов / определений препроцессора (макросы были расширены, поэтому вы не сможете найти макрос с помощью ctags).

Обычный способ Чтобы решить эту проблему, нужно сгенерировать «стандартный» файл тегов для внешних библиотек, а также

:se tags+=/home/me/libs/tags.stdc++
:se tags+=/home/me/libs/tags.libsox

и т. д.В некоторых библиотеках есть учебные пособия по созданию полезного файла тегов для использования со своими библиотеками (или предварительно созданных файлов тегов, предполагающих определенную разметку папки)

...