テクノロジー · 実用ガイド
make の clock skew:ツリー全体を touch する前に未来時刻を証明する
対象、前提ファイル、ナノ秒 mtime を保存し、host・VM・container・file server のどの時計が書いたかを特定します。

GNU make の clock skew は依存順序の警告です。対象や前提が build clock より未来に見えると、必要な処理が省略されたり無用な再buildが起きます。最初にpathとtimestampを保存し、時計の境界を直します。
警告と依存辺を凍結する
make command、version、working directory、未来fileを示す全行を保存します。秒・ナノ秒mtime、filesystem、mount、owner、inode、symlink先を記録し、debug出力でtarget、prerequisite、生成Makefileのどれか確認します。まだtouchやcleanをしません。
build clockより未来のfileを探す
build hostのUTC時刻と同期状態を記録し、それより新しいmtimeを列挙します。targetと各prerequisiteを比較し、sub-second差も保持します。小さなfile server差でも警告になり得ます。
writerの時間domainを特定する
各未来fileを作成・復元したprocessとmachineを特定します。host/guest、container、CI、network filesystem、dual boot、archive restoreを比較します。timezone表示ではなくUTC instantと同期証拠を比べます。
fileより先に時計境界を直す
対応するtime serviceでhost、guest、serverを修正し同期を確認します。未来fileを再作成するwriterは試験中停止します。境界修正後に、由来と正しい時刻が分かる生成物だけを削除または修正します。repo全体をtouchしません。
既知の境界から再buildする
証拠を保存後、正式clean targetまたは新build directoryで同じgoalを実行し、warningを隠さずartifactを検証します。一つの生成物だけが悪いと証明できた場合のみ精密に削除します。
incremental buildを再証明する
clean build後に変更なしで再実行し、余計な作業とskewがないことを確認します。次に一つの管理されたprerequisiteだけ変更し、期待した経路だけ再buildされることを確認します。未来file再発や未同期なら停止します。
