【问题标题】:How does MAKE remember the file timestampsMAKE如何记住文件时间戳
【发布时间】:2015-06-10 09:00:28
【问题描述】:

我找到了this question,它的问题基本相同,但没有得到真正的答案。

make 的配置文件/数据库文件在哪里记住文件时间戳,所以它可以知道发生了什么变化?我检查了,在我的项目中没有.make 或类似的,也没有在主目录中。

或者它是否以某种方式将信息存储在文件本身中,也许是通过修改时间戳? (虽然这听起来很可疑)

【问题讨论】:

  • 它确实得到了真正的答案。如果您在那里要求澄清,也许会更好。

标签: c makefile


【解决方案1】:

没有这样的“数据库”。该程序只是比较源文件和目标文件的文件系统修改和创建时间戳。

假设您有以下规则:

some_target: some_source_1 some_source_2

如果some_source_1some_source_2 的修改时间戳晚于some_target 的修改/创建时间,则规则将激活并重建目标。

【讨论】:

  • 是的,但它如何判断哪些文件发生了变化?它必须将信息存储在某个地方。
  • @MightyPork 是的,在 文件系统中。文件系统内置了用于创建和修改的时间戳。
  • 是的,我只是想理解。那么make在重建时会触及目标文件吗?
  • @MightyPork noatime 用于访问时间,而不是修改时间。这是文件系统中的两个不同字段。
  • 编译器不必更改它读取的文件的修改时间:用于编辑代码的编辑器会这样做。编译器仅更改它生成或更改的文件(目标文件等)的修改时间。这是非常直接的东西......
【解决方案2】:

Makefile 描述了目标依赖Make 在必要时执行命令以创建/重新创建目标。

如果目标不存在,则make 将尝试创建它。

如果目标确实存在,make 会比较目标及其依赖项的修改时间。如果在修改目标后修改了任何依赖项,则make 将执行命令以重新生成目标。

例如,对于 C 文件,目标是对应的 .o 文件,并且依赖于包含 C 源代码的文件(可能还有一些包含文件)。如果.c 文件比.o 文件新,则make 运行C 编译器。这将生成一个.o 文件,其修改时间比.c 文件更新。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-22
    • 2018-03-24
    • 1970-01-01
    • 1970-01-01
    • 2022-12-02
    • 1970-01-01
    相关资源
    最近更新 更多