0

コンピューターの時計を進めるコードに取り組まなければならないことがあります。この場合、一部の .cpp または .h ファイルは、最新の変更日が将来の時刻に設定されます。

後でクロックが修正され、ソースをコンパイルすると、システムはプロジェクトのほとんどを再構築します。これは、最新の修正日付の一部が将来のものであるためです。その後の各再コンパイルには同じ問題があります。

私が知っている解決策は次のとおりです。

a) 未来の時刻を持つファイルを見つけて、再保存します。プロジェクトが非常に大きく、Windows の高度な検索でも変更されたファイルを見つけるのに時間がかかるため、この方法は理想的ではありません。

b) プロジェクト全体を削除し、svn から再チェックアウトします。

この問題を回避する方法を知っている人はいますか?

ソースファイルの変更を検出するために最終変更日の代わりにアーカイブビットを使用するようにコンパイラに指示できるようにするビジュアルスタジオの設定はおそらくありますか?

または、この状況で使用できる再帰的な変更日付リセット ツールがあるのでしょうか?

4

6 に答える 6

5

心ゆくまで時計をいじることができ、開発マシンに影響を与えない仮想マシンを使用することをお勧めします。無料のものは、Microsoft のVirtual PCとSunのVirtualBoxの 2 つです。

于 2008-09-14T00:23:33.320 に答える
1

これが私の問題なら、システム時間をいじるのを避ける方法を探すでしょう。単体テストや仮想マシンなどでコードを分離します。

ただし、私はPowerShellが大好きなので:

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

これがあなたの状況で機能するかどうかはわかりませんが、時計を進めるのではなく、 gettime メソッド (または使用しているもの) をラップして、必要な未来の時間を返すようにしたらどうですか?

于 2008-09-13T23:31:39.560 に答える
1

Unix ユーティリティのインストール

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

find を呼び出すときは必ずフル パスを使用してください。そうしないと、代わりに Windows の find.exe が使用される可能性があります。これは Windows シェルではテストされていません。構文を少し変更する必要があるかもしれません。

于 2008-09-14T00:20:45.497 に答える
0

1)タイムスタンプを使用しないビルドシステムを使用して、sconsなどの変更を検出します

2)ccacheを使用して、タイムスタンプを使用する(そしてすべてを再構築する)ビルドシステムを高速化します。

いずれの場合も、タイムスタンプではなく、md5sumを使用してファイルが変更されていることを確認しています。

于 2008-09-15T18:13:02.447 に答える
0

私はウィンドウを使用しませんが、確かに awk や grep のようなものを使用して、「将来の」タイムスタンプ付きファイルを見つけ、それらを「タッチ」して適切な時間を取得できます (perl スクリプトでさえも)。

于 2008-09-13T23:30:35.007 に答える