Иногда мне приходится работать над кодом, который переводит часы компьютера вперед. В этом случае для некоторых файлов .cpp или .h дата последней модификации устанавливается на будущее время.
Позже, когда мои часы зафиксированы, и я компилирую свои исходники, система перестраивает большую часть проекта, потому что некоторые из последних дат модификации еще не наступили. Каждая последующая перекомпиляция имеет ту же проблему.
Известные мне решения:
а) Найдите файл с будущим временем и повторно сохраните его. Этот метод не идеален, потому что проект очень большой и требуется время даже для расширенного поиска Windows, чтобы найти файлы, которые были изменены.
б) Удалите весь проект и перепроверьте его из svn.
Кто-нибудь знает, как я могу обойти эту проблему?
Возможно, есть настройка в Visual Studio, которая позволит мне указать компилятору использовать бит архива вместо даты последней модификации для обнаружения изменений исходного файла?
Или, может быть, в этой ситуации можно использовать рекурсивный инструмент сброса даты изменения?





Я не использую окна, но наверняка есть что-то вроде awk или grep, которые вы можете использовать, чтобы найти «будущие» файлы с отметками времени, а затем «прикоснуться» к ним, чтобы у них было нужное время - даже скрипт perl.
Я не знаю, работает ли это в вашей ситуации, но как насчет того, чтобы не двигать часы вперед, а обернуть свой метод gettime (или что-то еще, что вы используете) и заставить его возвращать необходимое вам время в будущем?
Установить Unix Utils
touch temp
find . -newer temp -exec touch {} ;
rm temp
Обязательно используйте полный путь при вызове find, иначе вместо него, вероятно, будет использоваться find.exe из Windows. Это не проверено в оболочке Windows - вам может потребоваться немного изменить синтаксис.
Я бы порекомендовал использовать виртуальную машину, где вы можете повозиться с часами сколько душе угодно, и это не повлияет на вашу машину разработки. Две бесплатные: Виртуальный ПК от Microsoft и VirtualBox от Sun.
Если бы это была моя проблема, я бы искал способы избежать потери системного времени. Изоляция кода под модульными тестами, или виртуальной машиной, или чем-то еще.
Однако, поскольку я люблю PowerShell:
Get-ChildItem -r . |
? { $_.LastWriteTime -gt ([DateTime]::Now) } |
Set-ItemProperty -Name "LastWriteTime" -Value ([DateTime]::Now)
1) Используйте систему сборки, которая не использует временные метки для обнаружения изменений, например бра
2) Используйте ccache для ускорения вашей системы сборки, которая использует временные метки (и пересобирает все).
В любом случае для проверки того, что файл был изменен, используется md5sum, а не временные метки.
Оба этих решения обрабатываются makepp, первое автоматически, второе - необязательно.
Я мог бы написать программу / сценарий, но наверняка уже что-то сделано.