如何生成丢失的#include文件的列表
How to generate a list of missing #include files
背景:我正在处理一个大型c++项目,该项目具有多个可执行文件和库输出,以及一组正在工作的make文件(即,假设您拥有整个代码库,则可以键入make,它将构建所有库和可执行文件)。
我的问题是,我必须部分编译项目,并简单地链接已经为项目的其他部分编译的库。我已经获得了项目其他部分的lib文件,但不是使用库所需的所有头文件。
问题:我如何生成一个文件列表,以便成功完成编译,然后链接与项目预编译部分有依赖关系的项目部分?仅通过运行make文件,我就收到了第一个缺少依赖项的错误,但我如何生成所有的列表?
我尝试过的事情/示例:启动make脚本来编译和链接moduleA
。make搅动了一段时间,然后发出一个错误,它找不到moduleAxyz.h
中包含的moduleBCommon.h
。它找不到它,因为它在磁盘上不存在。。。我还没有得到文件,必须要求它
如果您使用的是gcc编译器,此命令将为您提供丢失的头文件:
gcc -M -MG filename.cpp
这列出了所有依赖项:
gcc -M filename.cpp
这列出了不属于系统标头的依赖项:
gcc -MM filename.cpp
如果你没有moduleBCommon.h
,那么你就不知道它还有哪些头#include
,所以我认为在获得任何丢失的头之前,不可能创建整个列表。
为什么不能要求提供与库相关联的所有头文件?不管是谁负责这些库,都已经因为没有提供它们而犯了错误,如果没有人知道哪些头文件与库一起使用,那么很明显有人在源代码管理方面做得很糟糕,所以管理层应该容忍来自您的迭代请求。
(除非你的经理在技术上不称职,不懂电脑,逻辑上有挑战性的MBA类型,这是很有可能的。)
您关心的不是丢失的文件,而是更多未定义的类型、类或函数。有一个你错过的文件列表只是第一步,因为它们可能会向前声明更多的类,如果你需要的话,你再也没有定义它们。
我用来检测这种依赖关系的唯一免费工具是cppcheck。发展似乎已经放缓了很多,它产生了一些典型的假阳性,但除此之外,它确实发挥了作用。
- Pybind11:将元组列表从Python传递到C++
- 从链接列表c++中删除一个项目
- 如何(从固定列表中)选择一个数字序列,该序列将与目标数字相加
- C++如何通过用户输入删除列表元素
- 读取文件的最后一行并输入到链接列表时出错
- 既然存在危险,为什么项目要使用-I include开关
- 复制列表初始化的隐式转换的等级是多少
- LNK2038、MSVS2017 MAGMA的原因列表
- 有充分的理由在h文件中使用include保护而不是cpp文件吗
- 不能在初始值设定项列表中将非常量表达式从类型 'int' 缩小到'unsigned long long'
- 没有为自己的结构调用列表推回方法
- 如何将更多文件夹添加到c++include路径
- 什么是"#include <boost/functional/hash.hpp> "?
- 使用简单类型列表实现的指数编译时间.为什么
- 一对向量构造函数:初始值设定项列表与显式构造
- 标准是否使用多余的大括号(例如 T{{{10}}})定义列表初始化?
- 如何向 g++ 编译器解释如何读取用于从'list'文件中搜索 .h 文件的'include'目录列表
- 如何生成丢失的#include文件的列表
- #include <initializer_list> 需要在基于范围的 for 中使用初始值设定项列表?
- MSBuild-无法打开包含文件(尽管已在include列表中列出)