2017-02-17 1 views
1

「きれいなビルドを試して、それがうまくいくかどうか」を聞いたことがあります。頻繁に変なランタイムエラーは、再構築後に消えます。これにより、依存関係を適切に追跡することがビルドシステムの仕事であると私は思いました。ビルドシステムのバグを示す再構築時にランタイムエラーが消えていますか?

ランタイムエラー定義によるビルドシステムのバグ(make、msbuildなど)。別の言い方をすれば、クリーンビルドとノーマルビルドで異なる結果が得られた場合、それはビルドシステムのバグということになりますか?

編集:私はthe build environment is saneを想定しています - (代わりに古いタイムスタンプまたは同じの)ファイルが更新されると、その「最終変更」タイムスタンプが新しくなったことを意味しています。実際、私が知っているすべてのバージョン管理システムは、そうでなければ、タイムスタンプに依存するMakeシステムのようなビルドシステムを破り、更新が必要なファイルを追跡できないため、そのルールに従います。

+0

あなたのシステムとm。この問題は、ソースモジュールの1つをロールバックすることによって解決されます。あなたは通常のビルドを行います。コンパイルされたモジュールのタイムスタンプはソースモジュールのタイムスタンプの後にあるため、そのモジュールを再コンパイルしません。ビルドされたシステムを実行しても、それでも問題はあります。クリーンビルドを実行すると、すべてのモジュールがビルドされます。今問題は修正されました。 –

+0

Gitは、特にこの問題に対処するために、ファイルを置き換えるときのタイムスタンプを現在の時刻に設定します。私はすべてのバージョン管理システムがそうすると思います。 http://stackoverflow.com/a/2179876/492336 – sashoalm

+0

私はちょうど私に起こったシナリオを記述しています。 –

答えて

1

ビルドシステムは、パフォーマンスまたは完全性のために最適化できます。

すべて再ビルドは完全性ビルドです。

再構築部分が失敗した理由は、

  • 間違った知識です。ライブラリが構築されますが、断片化されたビルドシステムは全体の依存関係を理解し​​ません。
  • 依存関係がありません。ヘッダーからCへのコードの直接の依存関係は理解されていますが、間接的な依存関係は見落とされます。
  • 編集して、誤ってコンパイルを続行します。部分ビルドミッドは、コード変更の結果を理解し、十分に再コンパイルしません。

これらすべての過ちはファイル

  • 速くは
  • 迅速にバグが周り
  • あなたはご自身の判断をするために必要な電源を入れコンパイル作る維持する

    • 単純な利点によって相殺されています値がどこにあるのか

    +0

    もう1つの可能性 - アーティファクトは、以前のビルドの試行の一部として部分的にビルドされ、現在は不完全な状態です。このアーティファクトの依存関係が更新されない場合、構築システムはアーティファクトを再構築する必要があることを知りません。 – Stobor

    関連する問題