Ninjaで差分が認識されない現象と解消法


はじめに

C++で書かれたライブラリのビルドで詰まったのでメモとして残す.

※ビルドシステム周りがよく分かってないので間違っているかも

発生した現象

ライブラリを落としてきて,初回ビルドするところまでは成功した.

その後,一部のファイルを rsync で転送してライブラリを部分的に更新した.ここで再度 ninja build を行うと ninja: no work to do.と表示された.

つまり,ファイルの差分が認識されずビルドされなかった.

原因

単純に,ファイルのタイムスタンプがずれていた.

タイムスタンプを見ると,ライブラリ全体よりも上書きしたファイルのほうが古くなっていた.これが原因で,ファイルの差分が検出されなくなったらしい.

対処法

今回の場合は以下のコマンドで対処した.

touch 編集したファイルのパス

touch は指定したファイルのタイムスタンプを更新するコマンド.今回の場合は,ファイルのタイムスタンプを現在の時刻に上書きする.

最後に

rsync の実行でタイムスタンプがずれたとみられるので,rsyncのオプションを見直すことでも解決できると思う.