Hash 文件修改次数是否是确定文件是否已更改的可靠方法?
假设我只想在某些文件发生更改时重新编译它们,那么使用文件修改时间是可靠的来源吗?我知道很多人使用哈希,但这真的有必要吗 这是否取决于操作系统或文件系统Hash 文件修改次数是否是确定文件是否已更改的可靠方法?,hash,compilation,timestamp,reliability,Hash,Compilation,Timestamp,Reliability,假设我只想在某些文件发生更改时重新编译它们,那么使用文件修改时间是可靠的来源吗?我知道很多人使用哈希,但这真的有必要吗 这是否取决于操作系统或文件系统 如果一个文件被“触摸”但没有被修改,那也没什么大不了的,只要修改时修改时间总是在更新。选择要编译的文件和哪些文件与机器性能、编译和链接工具效率没有多大关系。如果一个项目有大量的文件,并且一个项目的构建需要几个小时,那么您显然希望排除尽可能多的不需要重新构建的文件。另一方面,对于简单的小型项目,每次完全处理所有文件可能是可行的 对于介于这两个极端之
如果一个文件被“触摸”但没有被修改,那也没什么大不了的,只要修改时修改时间总是在更新。选择要编译的文件和哪些文件与机器性能、编译和链接工具效率没有多大关系。如果一个项目有大量的文件,并且一个项目的构建需要几个小时,那么您显然希望排除尽可能多的不需要重新构建的文件。另一方面,对于简单的小型项目,每次完全处理所有文件可能是可行的
对于介于这两个极端之间的项目,有必要查看机器处理简单的日期-模比较与计算哈希并比较它们所需的时间。另外,将哈希处理时间与通过构建步骤发送相同文件所需的时间进行比较也很重要。如果后面这些时间的比率接近1::2,您最好还是坚持使用简单的文件mod date方法。我假设检查mod dates是O(1),哈希虽然较慢,但应该比编译整个文件快得多。你还没有给出任何理由更喜欢哈希而不是mod日期;为什么我不能一直这样做?@Mark-我没有给出偏好,因为我认为这实际上是一个性能问题。与计算相同文件上的哈希值相比,比较篡改文件日期的时间。@Mark-在生成系统中,通常根本不比较文件内容。您真正要做的是将文件的某些属性与构建过程的相应构建产品/结果进行比较。例如,使用日期将源文件日期与对象文件日期或对象日期与可执行日期进行比较。通常,通过哈希,您可以捕获并保存每个文件在构建过程中使用的哈希。下一个构建将比较文件新计算的哈希值和以前存储的哈希值。