科技 · 实用指南
make 报告 clock skew?touch 全目录前先证明未来时间戳
先保留准确目标、依赖项和纳秒级 mtime,再查清由主机、虚拟机、容器还是文件服务器写入,最后才清理或改时间戳。

GNU make 的 clock skew 不是无关紧要的提示,而是依赖顺序告警。目标或依赖项看起来晚于构建时钟,make 可能漏掉应执行的工作或反复重建。先保留路径与时间戳,再修复时钟边界。
冻结告警与依赖边
保存完整 make 命令、版本、工作目录以及所有点名未来文件的行。以秒和纳秒精度记录路径、文件系统、挂载点、属主、inode 与符号链接目标。对受影响目标启用 make 调试,确认它是目标、依赖项还是生成的 Makefile。暂时不要 touch、clean 或复制。
找出所有晚于构建时钟的时间戳
记录构建主机的 UTC 时间和同步状态,再列出 mtime 晚于该基准的文件。逐项比较目标与依赖,不要只看源码。保留亚秒差异;GNU make 维护者明确指出很小的文件服务器与构建服务器偏差也会触发告警。
识别写入者的时钟域
为每个未来文件确认创建或恢复它的进程与机器,并核对宿主/虚拟机、容器、CI、网络文件服务器、双启动或归档恢复来源。时区显示不会改变 epoch mtime;比较 UTC 时刻与同步证据。远程文件系统还可能返回缓存属性。
先修时钟边界,再处理文件
用受支持的时间服务修正负责的主机、虚拟机或服务器,并确认同步。若写入进程会再次制造未来文件,测试期间先停掉它。只有边界正确后,才删除生成物或修改来源和预期时间都已明确的文件;不要为静音而批量 touch 仓库。
从已知边界重新构建
保存原证据后,使用项目正式 clean 目标或新构建目录运行同一目标,保留告警并核验产物。若仅一个生成物时间错误且已证明,删除该生成物通常比改所有源码安全,但底层时钟必须先修复。
证明增量构建重新可信
干净构建后,不改源码再运行一次;不应出现异常工作或 skew 告警。随后只修改一个受控依赖,确认仅预期依赖链重建。未来文件再次出现、时钟未同步、写入域未知或产物无法核验时立即停止。
