使用gcc时,是否有人建议在头文件中查找定义? 使用MSVC时,我可以右键单击并选择“转到定义”,这非常好。
我使用过netbeans + gcc,它确实有代码帮助,包括超链接到定义,所以这是一个选项。但是,我想知道是否有任何其他具有该功能的IDE,以及不使用IDE时的最佳方式。
答案 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
类似的好工具,用于查找各种语言的使用符号。在大多数编辑器中,集成并不像ctags
或ctags
那样好,但你可能更容易编写工具。您使用cscope
构建数据库,并使用mkid .
或gid foo
或类似查找查找符号。
我发现这三个工具提供的功能不同,我通常使用这三种功能。 lid foo
非常快速地在ctags
中搜索来源,vim
可以帮助找到来电者和被叫者,而cscope
(尤其是gid
)对于获取一些来说非常有用暗示其他工具不仅仅解决了复杂的情况。 (gid -s ...
和ctags
都不了解token pasting,但cscope
让我自己接近解决方案。)