【问题标题】:How can I find the chain of includes that leads to a declaration using Linux tools?如何使用 Linux 工具找到导致声明的包含链?
【发布时间】:2014-04-24 19:04:36
【问题描述】:

this question 一样,我想找到#includes 的链,通过它可以将特定定义合并到我的C/C++ 文件中。例如,假设main.c 包含此代码

#include <math.h>
int main() {
    double d = exp(0);
    return 0;
}

然后在我的系统(相当标准的 Linux)上,math.h 包括 bits/mathcalls.h,这是声明 exp() 的位置。所以我想对main.c 进行某种分析并获得类似的输出

exp:
 main.c
 math.h
 bits/mathcalls.h

格式无关紧要,我只想要完整的包含文件链,从 exp() 的使用位置到它的声明位置。是否有一些与 Linux 兼容的工具可以用来执行此操作?

我上面链接的问题提供了一种在 Visual Studio 中执行此操作的方法,但由于显而易见的原因,这对我不起作用。我确实使用 Kdevelop,所以如果我能在那个程序中做到这一点,那很好,或者一些命令行工具也很好。

【问题讨论】:

  • 在我的脑海中:你和无数其他 c 和 c++ 开发人员。在这个领域,依赖解决是一个复杂的问题。
  • 你考虑过Doxygen吗?我个人可以推荐它; VTK 有一个公共示例,您可以浏览它是否是您要查找的内容(文件类型是随机选择的,但很好地展示了 Doxygen 的强大功能)。
  • @MrDuk 我不知道 Doxygen 可以做到这一点。如果您能给我一些指导以帮助我入门,那将是一个非常可接受的答案。
  • 试试 gcc -E,这会解决你所有的#includes 并打印出代码。它几乎无法阅读,但结合较少且良好的搜索功能,您只需使用非常原生的工具。
  • @EGOrecords 我曾考虑过这一点,但正如你所说,这非常难以遵循。如果您有一些关于如何从预处理器输出中提取包含文件链的建议,或者有一些其他方法可以将复杂性降低到可管理的水平,那将是一个很好的答案。

标签: c++ c kdevelop


【解决方案1】:

Doxygen 可以在本机或对配置文件进行最少更改的情况下执行此操作。

VTK 有一个不错的公共页面,您可以在其中浏览 - 特别是,如果您查看其中一个高级域:vtkObjectBase,您可以开始看到 Doxygen 提供的信息的深度。

如果您查看vtkObject,您会立即看到所有继承该类的模块。此外,您可以单击Class Members 链接,具体查看哪些模块继承了哪些成员(例如,Observer 属于 vtkDataRepresentation 、 vtkOrientationMarkerWidget 、 vtkPainter 、 vtkPainterPolyDataMapper 、 vtkTextRepresentation )。

最后,这是Doxygen setup tutorial(尽管网络上的某处可能有额外的 1-2-3 步骤大纲)。

【讨论】:

  • 我要查找的关键信息是需要设置的配置文件属性。我想我设法弄清楚了它们,但生成的包含依赖关系图只超出了我项目中的文件的一级,这对于我的目的来说还远远不够。
猜你喜欢
  • 2021-11-25
  • 2012-01-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-04
  • 2012-08-21
  • 2016-06-18
  • 1970-01-01
相关资源
最近更新 更多