2008-09-13 26 views
0

有时我必须处理能够向前移动计算机时钟的代码。在这种情况下,某些.cpp或.h文件会将其最新修改日期设置为将来的时间。重置对源文件更改的检测

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

解决方案,我知道是:

一)发现,有未来的时间和重新保存的文件。此方法并不理想,因为该项目非常大,即使Windows高级搜索也需要时间来查找已更改的文件。

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

有谁知道我可以解决这个问题?

是否有可能在Visual Studio中的设置,让我来告诉编译器使用存档位,而不是最后修改日期的检测源文件的变化?

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

回答

1

如果这是我的问题,我会寻找方法来避免系统时间的浪费。隔离单元测试下的代码,或虚拟机或其他东西。

但是,因为我爱PowerShell

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

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

+0

我可以做一个程序/脚本,但肯定已经有东西了。 – 2008-09-13 23:37:23

1

我不知道这是否在您的情况,但怎么样你不向前移动你的时钟,但包装您GETTIME方法(或者你使用任何),并使其返回你所需要的未来时间?

1

安装Unix Utils

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

确保调用find时使用的完整路径,或者它可能会使用Windows的FIND.EXE代替。这在Windows外壳中未经测试 - 您可能需要修改一些语法。

5

我会推荐使用虚拟机,在那里你可以把时钟搅乱到你心中的内容,它不会影响你的开发机器。两个免费的来自微软的Virtual PC和来自Sun的VirtualBox

0

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

2)使用ccache加快构建系统这确实使用时间戳(并重建所有)。

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

+0

这两个解决方案都由[makepp](http:// makepp。sourceforge.net/),前者自动,后者可选。 – Daniel 2013-09-24 21:53:36