3

背景:我正在开发一个大型 c++ 项目,该项目具有多个可执行文件和库输出以及一组工作 make 文件(即假设您拥有整个代码库,您可以键入 make 并且它将构建所有库和可执行文件)。

我的问题是我必须部分编译项目,并简单地链接已经为项目的其他部分编译的库。我已经获得了项目其他部分的 lib 文件,但不是所有使用这些库所需的头文件。

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

我尝试过的事情/示例:启动 make 脚本以编译和链接moduleA。make 搅动了一段时间,然后发出一个它 can't find 的错误,该错误moduleBCommon.h来自moduleAxyz.h. 它找不到它,因为它在磁盘上不存在...我没有得到文件,必须请求它。

4

3 回答 3

5

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

gcc -M -MG filename.cpp

这列出了所有依赖项:

gcc -M filename.cpp

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

gcc -MM filename.cpp
于 2012-11-16T21:51:54.147 回答
3

如果您没有moduleBCommon.h,那么您将无法知道它是什么其他标题#include,因此我认为在获取任何缺少的标题之前不可能创建整个列表。

为什么不能要求所有与库关联的头文件?负责这些库的人已经因为不提供它们而犯了错误,如果没有人知道哪些头文件与这些库一起使用,那么显然有人搞砸了源代码控制,因此管理层应该容忍来自您的迭代请求。

(除非你的经理在技术上不称职、不懂计算机、逻辑上有挑战的 MBA 类型,这是很有可能的。)

于 2012-11-16T14:04:48.847 回答
1

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

我用来检测这种依赖关系的唯一免费工具是cppcheck。开发似乎已经放慢了很多,并且会产生一些典型的误报,但除此之外,它确实发挥了作用。

于 2012-11-16T13:45:29.050 回答