0

有时我必须编写使计算机时钟向前移动的代码。在这种情况下,某些 .cpp 或 .h 文件会将其最新修改日期设置为未来时间。

稍后,当我的时钟固定并编译我的源代码时,系统会重建大部分项目,因为一些最新的修改日期是在未来。随后的每次重新编译都有相同的问题。

我知道的解决方案是:

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

b) 删除整个项目并从 svn 重新签出。

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

Visual Studio 中是否有一个设置可以让我告诉编译器使用存档位而不是最后修改日期来检测源文件更改?

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

4

6 回答 6

5

我建议使用虚拟机,您可以在其中随心所欲地调整时钟,并且不会影响您的开发机器。两个免费的是Microsoft的Virtual PC和Sun的VirtualBox 。

于 2008-09-14T00:23:33.320 回答
1

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

于 2008-09-13T23:31:39.560 回答
1

安装Unix 实用程序

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

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

于 2008-09-14T00:20:45.497 回答
1

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

但是,因为我喜欢PowerShell

Get-ChildItem -r . | 
    ? { $_.LastWriteTime -gt ([DateTime]::Now) } | 
    Set-ItemProperty -Name "LastWriteTime" -Value ([DateTime]::Now)
于 2008-09-14T03:35:23.920 回答
0

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

于 2008-09-13T23:30:35.007 回答
0

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

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

无论哪种情况,它都使用 md5sum 来验证文件是否已被修改,而不是时间戳。

于 2008-09-15T18:13:02.447 回答