makeユーティリティはどの程度堅牢ですか?
たとえば、何かを「作成」しているときに、コンピューターの電源が切れ、次のコンピューターの起動後に作成が再開された場合、出力は正しいことが保証されますか(ファイルシステムが堅牢でない場合でも)?makeが失敗する可能性のある他の状況はありますか?
makeユーティリティはどの程度堅牢ですか?
たとえば、何かを「作成」しているときに、コンピューターの電源が切れ、次のコンピューターの起動後に作成が再開された場合、出力は正しいことが保証されますか(ファイルシステムが堅牢でない場合でも)?makeが失敗する可能性のある他の状況はありますか?
Make は、実行中にファイル システムに書き込みを行っています。したがって、実行中に中断された場合 (たとえば、コンピューターの電源が失われた場合やユーザーがプロセスを強制終了した場合)、不完全なファイルがファイル システムに書き込まれる可能性がありますが、ファイル システムにこれを防止する何らかのメカニズム (ZFS例えば)。
GNU Make 自体は、ファイルが不完全または壊れているかどうかを検出しません。タイムスタンプ付きでファイル システムに存在する限り、Make はそれが完了したと見なします。
基本的に、いいえ。
Make は、目的のファイルが部分的に書き込まれている場合、状況によってはだまされる可能性があるメカニズムによって、ターゲットが「最新」であるかどうかを判断しようとします。電源に障害が発生した場合、部分的な書き込みが可能であり、OS がタイムスタンプを更新している可能性があるため、「make」が間違っている可能性があります。
make で使用されるツール (コンパイラ、リンカーなど) が、アトミック操作を使用し、すべてをディスクに同期することによって安全であることは、技術的に実現可能です。ただし、「make」が安全であるためには、すべてのツールが安全でなければなりません。
また、すべてを同期すると、おそらくコンパイルが大幅に遅くなります。
GNU Makeは、その下にあるツールと同じくらい堅牢です。ターゲットに現在の日付/時刻がある場合、Makeは、部分的な出力しか含まれていない場合でも、ターゲットが完了したと見なします。