【发布时间】: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++ 开发人员。在这个领域,依赖解决是一个复杂的问题。
-
@MrDuk 我不知道 Doxygen 可以做到这一点。如果您能给我一些指导以帮助我入门,那将是一个非常可接受的答案。
-
试试 gcc -E,这会解决你所有的#includes 并打印出代码。它几乎无法阅读,但结合较少且良好的搜索功能,您只需使用非常原生的工具。
-
@EGOrecords 我曾考虑过这一点,但正如你所说,这非常难以遵循。如果您有一些关于如何从预处理器输出中提取包含文件链的建议,或者有一些其他方法可以将复杂性降低到可管理的水平,那将是一个很好的答案。