Make,ant,msbuild,...我所知道的比较artefact timestamps 的所有构建工具,以决定是否需要重建。
当签出任何版本以便告诉构建系统时,Git会将源文件时间戳重置为“now”:应该重建依赖于这些文件的伪像。
然而:
$ git checkout old_version # retrieving a.cpp@old_version
$ make # building a.out from a.cpp
$ git checkout new_version # updating a.cpp@new_version
$ git checkout - # resetting a.cpp@old_version
$ make # ...
如果只有make可以确定a.out
是用old_version构建的,那么可以等同于no-op。
有没有办法实现这个目标?你知道任何可以这种方式合作的构建系统/版本控制系统吗?
答案 0 :(得分:1)
完全依赖时间戳实际上是这些构建系统的缺陷。例如,在以下情况下失败:
Make,ant,msbuild,...我所知道的比较artefact的所有构建工具 时间戳决定是否需要重建。
看看scons。与其他构建工具的显着区别之一是使用MD5签名可靠地检测构建更改。这意味着它为每个目标存储MD5哈希值和用于构建该目标的命令行。在重建目标之前,它会重新计算MD5哈希值并知道是否需要重新编译。当然,它比仅仅查看时间戳更慢但没有提到的问题。但是,scons还提供可选的,可配置的传统时间戳支持。