后台:我正在开发一个带有多个可执行文件和库输出的大型c ++项目,其中包含一组有效的make文件(即假设你有完整的代码库,你可以输入make,它会构建所有库和可执行文件)。
我的问题是我必须部分编译项目,只需链接已经为项目的其他部分编译的库。我已经为项目的其他部分提供了lib文件,但并未提供使用这些库所需的所有头文件。
问题:如何生成我需要请求的文件列表,以便成功完成编译,然后链接项目中依赖于预编译的部分项目的一部分?只是通过运行make文件,我得到第一个缺少依赖项的错误,但是如何生成 all 的列表?
我尝试过的事情/示例:触发make脚本编译并链接moduleA
。 make会搅拌一段时间,然后发出一个无法找到moduleBCommon.h
的错误,该错误包含在moduleAxyz.h
中。它找不到它,因为它不存在于磁盘上......我没有提供该文件,必须请求它。
答案 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。发展似乎已经放缓了很多,它产生了一些典型的误报,但除此之外它还能发挥作用。