c++ - 重温 makefile 和 header 依赖项

标签 c++ makefile

这个问题是从理想主义的角度出发的。//前向声明

我一直在学习 makefile 的基础知识,我发现自己想知道被问到的同样问题 here关于 header 依赖项。从实际的角度来看,我很高兴有解决 header 依赖性问题的解决方案。然而,仔细考虑这个问题,我发现自己在问为什么 header 依赖项会排他性地影响编译单元。假设(参见前向声明)定义包含在头文件中,实现在源单元中定义,是否有任何理由认为修改头文件而不修改相应的源文件是值得的?如果不是,为什么重新编译相关源单元甚至很重要,因为单独的定义修改不会影响程序执行?这只是一个尽早发现接口(interface)定义更改错误的问题吗?

最佳答案

(准确地说,声明包含在头文件中,定义(即实现)包含在源文件中,但这只是术语。)

"Is there any reason that modification to a header file is merited without modification to the respective source file?"

是的。例如,将成员从 public 更改为 private。此外,多个源文件可以 #include 一个给定的头文件,因此对头文件的更改可能需要更改其中一个而不是另一个。例如,在类中添加/删除/重命名数据成员可能不需要对类实现进行任何更改,但仍需要更改使用该类的其他源代码。

即使源文件根本没有改变,如果头文件发生改变,逻辑上仍然有必要重新编译它。例如,添加/删除数据成员会改变类的大小,这意味着任何使用该类实例的代码都必须调整为其分配的内存量。

关于c++ - 重温 makefile 和 header 依赖项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15864412/

相关文章:

python - Makefile 无法运行源命令

c++ - 未定义对我的函数的引用

c++ - 从无窗口控件获取文本

c++ - 我将如何定义组合顶点的自定义方式?

opencv - 在 Ubuntu/Linux 上用 C++ 编译 OpenCV 代码的 Makefile

c - 如何修复 Makefile 错误?

c++ - 具有内部链接的命名空间

c++ - 将字符串值复制到类字段中?

c++ - SDL:初始化 TTF 问题。可能是自由打字?

makefile - 警告 : jobserver unavailable: using -j1. 将 '+' 添加到父规则