基于文件内容修改重建,而不是修改日期

Rebuild based on file content modification, but not modification date

TL;DR 我们如何将代码生成集成到构建系统中?

对于带有代码生成的源码,虽然将其中一行代码生成改成了一个新的生成文件,但是所有的代码都是重新生成的。在这个新生成的代码中,虽然大部分代码保持不变,但构建系统(make)只查看修改日期并决定重新编译所有生成的代码。 make/cmake/bazel 是否提供了根据文件更改而不是修改日期来检查依赖项的工具?

是否有任何其他构建系统考虑生成的代码是否需要重新编译,而不是使用修改日期而是文件更改本身?

Bazel 使用哈希来确定必须执行的操作。例如,您可以通过添加新的空行来修改 C++ 文件。文件将被重新编译,但不会触发下一步操作(如链接库),因为编译的输出将保持不变(可能是因为它取决于使用的编译器)。 That movie is a good introduction

Make/Ninja 一定要使用时间戳。 CMake 不关心,因为整个文件比较机制委托给底层构建系统