2021年10月25日月曜日

MakeじゃないのよSConsは その1

ファイルの更新判定の話。

Makeに慣れ親しんだおじさんがコードをいじりながらビルドしていると覚える違和感は、ファイルの更新判定。SConsはデフォルトでタイムスタンプではなく、MD5 hashで判定する。要するに、ファイルの中身が変わらないと更新されたとみなされない。Makeで部分的に再コンパイルしたいときにtouchするという常套手段は、SConsでは通用しないわけだ。

この仕様のおかげで、依存関係の末端にあるファイルが更新されても最終成果物が再生成されない場合もある。例えば、以下の依存関係に対して

一度フルビルドしてからhello.hのコメントのtypoだけ修正した場合。Makeならtest0.o, hello.oを再生成した後、それらに依存しているtest0まで確実に再生成する。

一方SConsだと、更新されたhello.hに依存しているtest0.o, hello.oを再生成するまでは同じ。しかし、コメント修正程度だったため前と全く変わらないtest0.o, hello.oが生成された場合、test0の再生性は不要だと判断する。

0 件のコメント:

コメントを投稿