기술 · 실용 가이드
make clock skew: 전체 트리를 touch하기 전에 미래 타임스탬프를 증명하세요
정확한 target, prerequisite, 나노초 mtime을 보존한 뒤 host, VM, container 또는 file server 중 어떤 시계가 기록했는지 확인합니다.

GNU make의 clock skew는 단순한 알림이 아니라 의존성 순서 경고입니다. 파일이 build clock보다 미래로 보이면 필요한 작업을 건너뛰거나 불필요하게 다시 빌드할 수 있습니다. 먼저 경로와 시간을 보존하고 clock 경계를 고치세요.
경고와 의존성 경계를 보존한다
전체 make 명령, 버전, 작업 디렉터리와 미래 파일을 지목한 모든 줄을 저장합니다. 초와 나노초 mtime, filesystem, mount, owner, inode, symlink를 기록하고 debug로 target, prerequisite, 생성 Makefile 중 무엇인지 확인합니다. 아직 touch나 clean을 하지 마세요.
build clock보다 미래인 timestamp를 찾는다
build host의 UTC와 동기화 상태를 기록하고 그 기준보다 늦은 mtime을 나열합니다. target과 각 prerequisite를 비교하고 sub-second 차이도 보존합니다. 작은 fileserver 차이도 경고를 만들 수 있습니다.
writer의 시간 domain을 식별한다
각 미래 파일을 만들거나 복원한 process와 machine을 찾습니다. host/guest, container, CI, network filesystem, dual boot, archive restore를 점검합니다. timezone 표시는 epoch mtime을 바꾸지 않으므로 UTC instant와 동기화 증거를 비교하세요.
파일보다 clock 경계를 먼저 수리한다
지원되는 time service로 책임 host, VM 또는 server를 수정하고 동기화를 확인합니다. 미래 파일을 다시 만드는 writer는 시험 중 정지합니다. 경계가 맞은 뒤 출처와 올바른 시간이 입증된 생성물만 삭제하거나 수정하고 repo 전체를 touch하지 마세요.
알려진 경계에서 다시 빌드한다
증거를 보존한 뒤 공식 clean target 또는 새 build directory에서 같은 goal을 실행하고 artifact를 검증합니다. 단일 생성물의 시간이 잘못됐다고 입증한 경우에만 정밀하게 제거하세요.
incremental build 신뢰를 다시 증명한다
clean build 후 변경 없이 다시 실행해 예상 밖 작업과 skew가 없는지 확인합니다. 다음으로 통제된 prerequisite 하나만 바꾸고 예상 경로만 재빌드되는지 확인합니다. 미래 파일이 돌아오거나 clock이 미동기화이면 중단하세요.
