【问题标题】:Do you know tool building tree of include files in project\file?您知道项目\文件中包含文件的工具构建树吗?
【发布时间】:2010-11-16 14:20:32
【问题描述】:

说,我想要一个工具(或脚本?)获取项目(或 .h 文件)并构建包含在其中的“包含”的可搜索树(包含到包含到等等)。有没有这样的东西?我应该自己写这个[当然我是:),但可能有人已经写好了,或者可能知道如何获得它]?

【问题讨论】:

标签: c++ scripting include


【解决方案1】:

不完全确定这是您所追求的,但您可以通过从基本 c 文件生成 CPP 后处理的文件并找出文件/行号 cmets 来轻松获取包含列表,例如,使用 gcc

gcc -E main.c {usual flags} | grep '#' | cut -d' ' -f3 | sort | uniq

main.c 是你的基本 c 文件。

【讨论】:

  • 这就是我过去的做法(MSVC 除外)。自动化的难点在于从项目或 makefile 中获取正确的编译标志,因为它们会影响何时包含哪些文件。
  • 谢谢。通常,大型和旧项目中的“我在追求”.h 文件(包含的后果)会导致失败。我对 MSVC 很感兴趣,但如果我没有收到更好的答案 - 可以。
  • VS CL.exe 编译器具有 /E 和 /P 标志,它们分别将处理后的输出生成到标准输出和文件。您可以从几个(免费)Unix 工具之一获取 grep、cut 等,用于 Windows 软件包,例如unxutils.sourceforge.net.
【解决方案2】:

我知道这是一个老问题,比单独使用 gcc/g++ -E 输出稍微有用的输出也会使用 -H 标志(代替或补充):

g++ -H {my -I and other flags} -E -o /dev/null file.cpp

这是一个示例输出,树结构有助于找出谁包含了什么 作为奖励,它还在底部列出了哪些文件可以从包含保护中受益

. generated/gen-cpp/File.h
.. /usr/include/thrift/TProcessor.h
... /usr/lib/gcc/x86_64-redhat-linux/4.4.6/../../../../include/c++/4.4.6/string
.... /usr/lib/gcc/x86_64-redhat-linux/4.4.6/../../../../include/c++/4.4.6/x86_64-redhat-linux/bits/c++config.h
..... /usr/include/bits/wordsize.h
..... /usr/lib/gcc/x86_64-redhat-linux/4.4.6/../../../../include/c++/4.4.6/x86_64-redhat-linux/bits/os_defines.h
...... /usr/include/features.h
....... /usr/include/sys/cdefs.h
........ /usr/include/bits/wordsize.h
....... /usr/include/gnu/stubs.h
........ /usr/include/bits/wordsize.h
........ /usr/include/gnu/stubs-64.h
..... /usr/lib/gcc/x86_64-redhat-linux/4.4.6/../../../../include/c++/4.4.6/x86_64-redhat-linux/bits/cpu_defines.h
.... /usr/lib/gcc/x86_64-redhat-linux/4.4.6/../../../../include/c++/4.4.6/bits/stringfwd.h

...

【讨论】:

  • 这很棒,但我如何将它用于 Windows 工具?
  • 对不起@bgee 我没有这些方便的
【解决方案3】:

如果我没记错的话,doxygen 可以做到这一点。

【讨论】:

  • 它如何处理预处理器指令和包含路径?
  • @sehe:我已经很久没有机会和 doxygen 一起玩了。你将不得不尝试。不过,据我所知,它对怪异配置的支持令人印象深刻,而且发展迅速。
【解决方案4】:

Include Finder 是一个非常有用的工具。有一些bug,好久没更新了,不过作者提供了源码,大家可以根据自己的喜好修改。

【讨论】:

    【解决方案5】:

    Eclipse CDT 在Window --> Show View --> Other... --> C/C++ --> Include Browser 下有Include Browser

    【讨论】:

      【解决方案6】:

      有一个名为include gardener的工具,可以在这里找到: https://github.com/feddischson/include_gardener 这将为您提供dotgraphml (xml) 格式的包含树。但它不考虑其他预处理器语句,如#if#else#endif

      【讨论】:

        猜你喜欢
        • 2018-10-21
        • 1970-01-01
        • 1970-01-01
        • 2018-07-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-08-24
        • 1970-01-01
        相关资源
        最近更新 更多