我一直在阅读 make
并查看流行的 Makefiles C
projects on GitHub巩固我的理解。
我很难理解的一件事是,为什么我看过的示例(例如 lz4、linux 和 FFmpeg)似乎都没有说明头文件依赖性。
对于我自己的项目,我的头文件包含:
- 数字和字符串常量
- 宏
- 简短的内联函数
因此,在决定是否重新编译时,考虑到对这些的任何更改似乎是必要的。
我发现 gcc
可以从依赖项自动生成 Makefile 片段,如 this SO answer 所示。但我还没有在我看过的任何项目中看到它的使用。
您能帮我理解为什么这些项目显然忽略了头文件依赖性吗?
最佳答案
我会尝试回答。
一些项目的源发行版包括一个configure
脚本,它从模板/任何东西创建一个 makefile。
因此需要为他/她的目标重新编译包的最终用户只需要做:
$ configure --try-options-until-it-works
$ make
configure
阶段可能会出错,但这与 makefile 本身无关。用户必须下载东西、调整路径或配置开关并再次运行,直到成功生成 makefile。
但是一旦生成了 makefile,对于用户而言,事情应该从那里开始变得非常顺利,用户只需要构建产品一次就能够使用它。
一小部分用户需要更改一些源代码。在这种情况下,他们将不得不清理所有内容,因为提供的 makefile 并不是实际开发人员管理其构建的方式。他们可能会使用其他系统(code::blocks、Ant、gprbuild...),只提供 makefile 以从头开始自动化生产,避免依赖复杂的生产系统。 make
即使在 Windows/MinGW 上也是相当标准的。
请注意,有些文件系统提供构建审计 (Clearcase),其中依赖项是自动管理的 (clearmake
)。
如果您将 makefile 视为构建所有源代码的批处理脚本,则无需使用添加依赖系统
- 模板联编文件
- 一个
gcc -MM
命令,用于将依赖项附加到它(这需要时间)
请注意,您可以通过一些额外的工作自行构建它(将 depend
目标添加到您的 makefile)
关于c - 为什么在成熟的 C 项目的 Makefile 中不考虑对头文件的更改?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47308719/