如何生成缺少的#include文件列表

时间:2012-11-16 13:39:12

标签: c++ makefile

后台:我正在开发一个带有多个可执行文件和库输出的大型c ++项目,其中包含一组有效的make文件(即假设你有完整的代码库,你可以输入make,它会构建所有库和可执行文件)。

我的问题是我必须部分编译项目,只需链接已经为项目的其他部分编译的库。我已经为项目的其他部分提供了lib文件,但并未提供使用这些库所需的所有头文件。

问题:如何生成我需要请求的文件列表,以便成功完成编译,然后链接项目中依赖于预编译的部分项目的一部分?只是通过运行make文件,我得到第一个缺少依赖项的错误,但是如何生成 all 的列表?

我尝试过的事情/示例:触发make脚本编译并链接moduleA。 make会搅拌一段时间,然后发出一个无法找到moduleBCommon.h的错误,该错误包含在moduleAxyz.h中。它找不到它,因为它不存在于磁盘上......我没有提供该文件,必须请求它。

3 个答案:

答案 0 :(得分:4)

如果您使用的是gcc编译器,则此命令将为您提供缺少的头文件:

gcc -M -MG filename.cpp

列出了所有依赖项:

gcc -M filename.cpp

这列出了不属于系统标题的依赖项:

gcc -MM filename.cpp

答案 1 :(得分:3)

如果你没有moduleBCommon.h,那么你不知道它是#include的其他标题,所以我认为在获得任何标题之前不可能创建整个列表。缺少标题。

为什么不能要求所有与库关联的头文件?负责图书馆的人已经因为没有提供它们而进行了调查,如果没有人知道哪些头文件与库有关,那么很明显有人搞砸了源代码控制,因此管理层应该容忍你的迭代请求。

(除非你的经理在技术上不称职,计算机文盲,逻辑上受到挑战的MBA类型,这很可能。)

答案 2 :(得分:1)

而不是丢失的文件,您立即关注的是更多未定义的类型,类或函数。拥有一个你错过的文件列表只是第一步,因为他们可能会向前声明更多的类,如果你需要它们,你将再次没有定义。

我用来检测此类依赖项的唯一免费工具是cppcheck。发展似乎已经放缓了很多,它产生了一些典型的误报,但除此之外它还能发挥作用。