【发布时间】:2010-11-16 14:20:32
【问题描述】:
说,我想要一个工具(或脚本?)获取项目(或 .h 文件)并构建包含在其中的“包含”的可搜索树(包含到包含到等等)。有没有这样的东西?我应该自己写这个[当然我是:),但可能有人已经写好了,或者可能知道如何获得它]?
【问题讨论】:
-
相关(Visual Studio):stackoverflow.com/q/1137966/711006
说,我想要一个工具(或脚本?)获取项目(或 .h 文件)并构建包含在其中的“包含”的可搜索树(包含到包含到等等)。有没有这样的东西?我应该自己写这个[当然我是:),但可能有人已经写好了,或者可能知道如何获得它]?
【问题讨论】:
不完全确定这是您所追求的,但您可以通过从基本 c 文件生成 CPP 后处理的文件并找出文件/行号 cmets 来轻松获取包含列表,例如,使用 gcc
gcc -E main.c {usual flags} | grep '#' | cut -d' ' -f3 | sort | uniq
main.c 是你的基本 c 文件。
【讨论】:
我知道这是一个老问题,比单独使用 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
...
【讨论】:
如果我没记错的话,doxygen 可以做到这一点。
【讨论】:
Include Finder 是一个非常有用的工具。有一些bug,好久没更新了,不过作者提供了源码,大家可以根据自己的喜好修改。
【讨论】:
Eclipse CDT 在Window --> Show View --> Other... --> C/C++ --> Include Browser 下有Include Browser。
【讨论】:
有一个名为include gardener的工具,可以在这里找到:
https://github.com/feddischson/include_gardener
这将为您提供dot 或graphml (xml) 格式的包含树。但它不考虑其他预处理器语句,如#if、#else、#endif。
【讨论】: