使用gcc时,在头文件中查找定义的好方法是什么?

时间:2012-01-16 00:46:27

标签: c++ windows code-assist

使用gcc时,是否有人建议在头文件中查找定义? 使用MSVC时,我可以右键单击并选择“转到定义”,这非常好。

我使用过netbeans + gcc,它确实有代码帮助,包括超链接到定义,所以这是一个选项。但是,我想知道是否有任何其他具有该功能的IDE,以及不使用IDE时的最佳方式。

4 个答案:

答案 0 :(得分:3)

您可以运行Doxygen来生成基于HTML的源浏览器。这不要求使用Doxygen风格的文档注释代码。它适用于多种语言,包括 C ++ Java Markdown .md文件转到“相关页面”)。< / p>

这是一种从命令行配置和启动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加密的主目录有limit of 143 characters 。要解决此问题,您可能需要在家外写下html文件夹。

快速而肮脏的解决方案是将html链接到/tmp/dev/shm中的文件夹 - 也可能chmod权限以获得更好的数据安全性。

答案 1 :(得分:2)

试试CScope。与Emacs模块xscope一起,您可以告诉Emacs M-x cscope-find-global-definition,它将跳转到定义符号的文件。 非常方便。

当然,像Eclipse或KDevelop或Code :: Blocks这样的IDE也应具有这样的功能。

答案 2 :(得分:1)

Eclipse CDT与平台无关,具有此功能(以及更多功能)。它为您项目中的所有包含(库+您自己的)编制索引,因此您可以找到任何声明的定义(或者,我应该说,任何声明)。您可以将Eclipse视为花哨的面向C ++的文本编辑器,其中包含使用makefile启动make(nmake.exe或其他)的附加功能。 我使用WinSDK的Eclipse + MS cl.exe编译器 - 它们像魅力一样工作。我从Eclipse运行nmake.exe,Eclipse很好地将nmake.exe控制台重定向到特殊的IDE窗口。它还解析编译器的输出并自动突出显示有问题的行。 人们唯一需要做的就是从Eclipse中为nmake.exe设置环境变量。

答案 3 :(得分:0)

cscope是我最喜欢理解C代码的工具之一,但它可能无法很好地转换为Windows世界。

exuberant ctags是查找数十种语言定义的绝佳工具。大多数合理的编程编辑器提供了一些用于调用ctags定义信息的接口。 (例如,vim允许您使用^]来查找符号的定义,并使用^T来弹出备份堆栈。)使用{{1}构建数据库使用编辑器查找定义。 (例如,ctags -R .将在vim -t foo数据库中查找foo标记并跳转到该文件和行。)

GNU idutils包提供了一些与ctags类似的好工具,用于查找各种语言的使用符号。在大多数编辑器中,集成并不像ctagsctags那样好,但可能更容易编写工具。您使用cscope构建数据库,并使用mkid .gid foo或类似查找查找符号。

我发现这三个工具提供的功能不同,我通常使用这三种功能。 lid foo非常快速地在ctags中搜索来源,vim可以帮助找到来电者和被叫者,而cscope(尤其是gid)对于获取一些来说非常有用暗示其他工具不仅仅解决了复杂的情况。 (gid -s ...ctags都不了解token pasting,但cscope让我自己接近解决方案。)