重置源文件更改检测

时间:2008-09-13 23:19:41

标签: c++ visual-studio svn time timezone

有时我必须处理能够推动计算机时钟的代码。在这种情况下,一些.cpp或.h文件将其最新修改日期设置为未来时间。

稍后,当我的时钟被修复,并且我编译我的源时,系统会重建大部分项目,因为将来会有一些最新的修改日期。每次后续重新编译都有同样的问题。

我知道的解决方案是:

a)找到具有未来时间的文件并重新保存。这种方法并不理想,因为项目非常大,即使是Windows高级搜索也需要时间来查找更改的文件。

b)删除整个项目并从svn中重新检查。

有谁知道如何解决这个问题?

Visual Studio中是否有一个设置允许我告诉编译器使用存档位而不是上次修改日期来检测源文件更改?

或许还有一个可以在这种情况下使用的递归修改日期重置工具?

6 个答案:

答案 0 :(得分:5)

我建议使用虚拟机,在那里你可以把时钟弄乱你心脏的内容,它不会影响你的开发机器。两个免费版本来自Microsoft Virtual PC和来自Sun的VirtualBox

答案 1 :(得分:1)

我不知道这是否适用于你的情况,但你怎么不把你的时钟向前移动,而是包装你的gettime方法(或者你正在使用的任何方法)并让它返回你需要的未来时间?

答案 2 :(得分:1)

安装Unix Utils

touch temp
find . -newer temp -exec touch {} ;
rm temp

确保在调用find时使用完整路径,否则它可能会使用Windows的find.exe。这在Windows shell中未经测试 - 您可能需要稍微修改一下语法。

答案 3 :(得分:1)

如果这是我的问题,我会想办法避免弄乱系统时间。隔离单元测试下的代码,虚拟机或其他东西。

但是,因为我喜欢PowerShell

Get-ChildItem -r . | 
    ? { $_.LastWriteTime -gt ([DateTime]::Now) } | 
    Set-ItemProperty -Name "LastWriteTime" -Value ([DateTime]::Now)

答案 4 :(得分:0)

我不使用Windows - 但肯定有类似awk或grep的东西可以用来查找“未来”带时间戳的文件,然后“触摸”它们以便它们有合适的时间 - 甚至是perl脚本。

答案 5 :(得分:0)

1)使用不使用时间戳来检测修改的构建系统,例如scons

2)使用ccache来加速使用时间戳的构建系统(并重建所有内容)。

在任何一种情况下,它都使用md5sum来验证文件是否已被修改,而不是时间戳。