c - 为什么在成熟的 C 项目的 Makefile 中不考虑对头文件的更改?

标签 c makefile

我一直在阅读 make 并查看流行的 Makefiles C projects on GitHub巩固我的理解。

我很难理解的一件事是,为什么我看过的示例(例如 lz4linuxFFmpeg)似乎都没有说明头文件依赖性。

对于我自己的项目,我的头文件包含:

  1. 数字和字符串常量
  2. 简短的内联函数

因此,在决定是否重新编译时,考虑到对这些的任何更改似乎是必要的。

我发现 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/

相关文章:

c - 我的 'scanf' 循环没有停止;当条件不工作时

c - 所有编译的工件都在单独的目录中?

c - 为什么每次我再次编译程序时都需要在文件中添加相同的元素

Python CFFI 不会将 typedef 从 cdef() 复制到生成的 C 文件中

iphone - 在 iPhone OS 上,如何以编程方式检查地址簿中是否存在联系人?

连接空终止符会导致段错误

生成多个输出文件时无法指定 -o [C 错误]

makefile - rm -rf 与 -rm -rf

c - Redis Makefile 如何包含头文件先决条件

android - 是否可以通过 make 或 Soong 构建使用 Kotlin 的 Android 应用程序?