Что такое хороший способ найти определения в заголовочных файлах при использовании gcc? - PullRequest
3 голосов
/ 16 января 2012

У кого-нибудь есть рекомендуемый способ найти определения в заголовочных файлах при использовании gcc?При использовании MSVC я могу просто щелкнуть правой кнопкой мыши и выбрать «Перейти к определению», что действительно хорошо.

Я использовал netbeans + gcc, и он имеет помощь с кодом, включая гиперссылку на определение, так чтоодин вариант.Тем не менее, я хотел бы знать, есть ли другие IDE с такой функциональностью, а также лучший способ, когда не используется IDE.

Ответы [ 4 ]

3 голосов
/ 16 января 2012

Вы можете запустить Doxygen , чтобы создать исходный браузер на основе HTML.Это не требует, чтобы код был аннотирован документацией в стиле Doxygen.Он работает для нескольких языков, включая C ++ , Java и Markdown (.md файлы переходят на «Связанные страницы»).

Вот способ настройки и запуска Doxygen из командной строки (протестировано в Linux) ...

## basic
echo -e "SOURCE_BROWSER=YES\n EXTRACT_ALL=YES\n RECURSIVE=YES\n" |doxygen -
xdg-open html/index.html

или

## include diagrams and non-public content -- and launch browser immediately
echo -e "HAVE_DOT=YES\n CALL_GRAPH=YES\n CALLER_GRAPH=YES\n SOURCE_BROWSER=YES\n EXTRACT_ALL=YES\n EXTRACT_PRIVATE=YES\n EXTRACT_STATIC=YES\n RECURSIVE=YES\n SEPARATE_MEMBER_PAGES=YES\n GENERATE_LATEX=NO\n EXCLUDE_SYMLINKS=YES" |doxygen - && chromium-browser --new-window html/index.html

Существует сопутствующая программа под названием doxywizard , который позволяет просматривать множество параметров конфигурации, доступных для настройки сгенерированного HTML.Кроме того, вы можете запустить doxygen -g, чтобы создать исходный файл конфигурации (который включает в себя подробные советы).

Я рекомендую следующие нестандартные параметры для создания браузера исходного кода:

SOURCE_BROWSER=YES ## display source code
EXTRACT_ALL=YES ## display all items (not just "documented" ones)
RECURSIVE=YES ## include source found in subdirectories
SEPARATE_MEMBER_PAGES=YES ## optional -- each class member has its own page

Как только вы откроете главную веб-страницу, вы можете перейти к источнику интереса (или использовать функцию поиска).Источник содержит перекрестные ссылки с интерактивными ссылками на соответствующие объявления.


Я сталкивался с этой проблемой несколько раз: doxygen может создавать действительно длинные имена файлов, а зашифрованный домашний каталог Linux имеет ограничение 143 символа .Чтобы обойти это, вам, возможно, придется написать папку html вне вашего дома.

Быстрое и грязное решение - связать html с папкой в ​​/tmp или /dev/shm -возможно также chmod разрешение для лучшей безопасности данных.

2 голосов
/ 16 января 2012

Попробуйте CScope .Вместе с модулем Emacs xscope вы можете указать Emacs M-x cscope-find-global-definition, который перейдет к файлу, в котором определен символ. Очень удобно.

Конечно, в такой среде IDE, как Eclipse, KDevelop или Code :: Blocks, также должна быть предусмотрена такая возможность.

1 голос
/ 16 января 2012

Eclipse CDT не зависит от платформы и имеет такую ​​функцию (плюс еще). Он индексирует все, что у вас есть в вашем проекте (библиотека + ваш собственный), так что вы можете найти определение любой декларации (или, я бы сказал, любой декларации). Вы можете думать об Eclipse как о необычном текстовом редакторе, ориентированном на C ++, с дополнительными возможностями для запуска make (nmake.exe или чего-либо еще) с вашим make-файлом. Я использую компиляторы Eclipse + MS cl.exe из WinSDK - они работают вместе как чары. Я запускаю nmake.exe из Eclipse, и Eclipse перенаправляет консоль nmake.exe в специальное окно IDE. Он также анализирует выходные данные компилятора и автоматически выделяет ошибочные строки. Единственное, что нужно сделать, это настроить переменные окружения для nmake.exe из Eclipse.

0 голосов
/ 16 января 2012

cscope - это один из моих любимых инструментов для понимания кода на C, но он может плохо отразиться на мире Windows.

exuberant ctags isотличный инструмент для поиска определений на десятках языков.Наиболее разумные программные редакторы предоставляют некоторый интерфейс для вызова ctags для определения информации.(vim, например, позволяет использовать ^] для поиска определения символа и ^T для вызова стека определений.) Вы строите базу данных, используя ctags -R ., и ищите определения, используя свой редактор,(Например, vim -t foo будет искать тег foo в базе данных ctags и переходить к этому файлу и строке.)

Пакет GNU idutils предоставляет некоторыеХорошие утилиты, похожие на ctags, для поиска использует символов на разных языках.Интеграция не так хороша в большинстве редакторов, как ctags или cscope, но для вам может быть проще писать инструменты.Вы строите базу данных с помощью mkid . и ищите символы с помощью gid foo или lid foo или аналогичных поисков.

Я считаю, что три инструмента предоставляют достаточно разные функциональные возможности, которые я обычно использую всеми тремя.ctags делает поиск по источнику в vim чрезвычайно быстрым, cscope может помочь в поиске вызывающих и вызывающих абонентов, а gid (особенно gid -s ...) хорош только для получения некоторых подсказок в сложных ситуациях, которые другие инструменты не делают.т просто решили.(Ни ctags, ни cscope хорошо не понимают вставку токена , но gid -s позволяет мне самому приблизиться к решению.)

...