我用的是最新的?Ruby 中的方法来确定是否必须重新编译/重新链接/重新生成文件等。有时我使用的构建框架在这些步骤中非常快,以至于输出文件和先决条件文件具有完全相同的文件修改时间戳. 这会导致构建框架不必要地重新编译/重新链接文件。
我比较像这样构建的时间戳 -
compile_file(file) unless uptodate?(file, %W(#{dependencies}))
我查找了最新的来源?从这里开始,它看起来像这样 -
def uptodate?(new, old_list, options = nil)
raise ArgumentError, 'uptodate? does not accept any option' if options
return false unless File.exist?(new)
new_time = File.mtime(new)
old_list.each do |old|
if File.exist?(old)
return false unless new_time > File.mtime(old)
end
end
true
end
正如所怀疑的,如果时间戳相等,它会返回 false。解决这个问题的最优雅的方法是什么?我曾尝试在 Linux 和 Windows 上运行该框架,但我遇到了同样的问题。从我在这里阅读的内容来看,这不太可能是文件系统特定的文件修改时间分辨率问题(因为 ext4 的分辨率为 1 微秒)。