2008-09-13 42 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