2011-12-07 7 views
0

1つのソースファイルを編集する場合、makeを実行してそのファイルとそのファイルが依存するすべてのファイルを再コンパイルしますか?もしそうなら、なぜですか?1つのファイルを変更すると、なぜ「make」が複数のファイルを再コンパイルしますか?

+0

[最小サンプル](http://sscce.org/)を投稿してください。あなたが尋ねていることを見ずに質問に答えることは不可能です。 – outis

+0

私は、makeユーティリティをよく理解している人なら誰でも答えが可能だと主張します。 – Rooster

+0

サンプルコードを提供するポイントは、あなたが話していることを明確にして指定することです。テクノロジーは微妙なことです。小さな違いは大きな影響を与える可能性があります。代表的なサンプルがなければ、回答者はあなたの特定のメイクファイルで何が起こっているのかを推測できます。あなたは物事を最適に構成することはできません。なぜ[あなたの質問の改善](http://tinyurl.com/so-hints)に逆らっていますか? – outis

答えて

4

なぜですか?
これは、Makeファイルを持っていることの全目的です。
特定のソースファイルが変更されている場合、すべての依存ファイルが変更されたファイルで再コンパイルされ、すべての依存ファイルが同じソースを参照し、コードベース全体が同期します。

どのようにですか?
makeユーティリティをチェックメイクファイルは一つには、明示的に他のファイルが特定のファイルに依存しているユーティリティを伝える依存関係のルールを指定する必要が作成されmodified.Whenされたファイルを確認するためにタイムスタンプ。したがって、これらのルールを使用すると、すべての依存ファイルもコンパイルされるため、生成されたバイナリは同じ更新コードを参照します。

+0

なぜか、私の例をユーモアしてください。ファイルAにはファイルBで定義された関数の呼び出しが含まれています。したがって、ファイルBにセミコロンを追加するだけで、Aが呼び出す関数シグネチャが変更された可能性があるため、makeはAを再コンパイルする必要があります。 – Rooster

+0

@bbarre:はい、そうです。 –

+0

@bbarre:多分。 B.hがヘッダーファイルで、関数を宣言する*または*定義していて、A.cppにB.hが含まれている場合、B.hはA.o(またはA、またはA.exe)の依存関係でなければなりません。しかし、B.cppがその関数を定義するファイルであるのに対し、A.cppは関数の宣言を他の場所で得ているのに対し、A.cppとB.cppを別々にAoとBoにコンパイルすれば、B.cppは必要ないAoの依存関係その場合、A.oとB.oは、あなたがそれらからビルドする実行可能ファイルの依存関係です。したがってB.hを残してB.cppを変更した場合、B.oとexeは再構築されますが、A.oは再構築されません。 –

0

ソースファイルを編集するときに、makeファイルを に加えて、そのファイルが依存関係になっているすべてのファイルを再コンパイルしますか?もしそうなら、なぜですか?

悪いメークファイル(それがどのように表示されていないか)が原因で発生する可能性があります。

ソースファイルにはテンプレートの実装が含まれており、どこかに含まれています。

4

もしそのファイルが他のファイルに#includeされていれば、それらの他のファイルが再コンパイルされ、プログラムの新しい "半分"と新しい "半分"の古いファイルを望んではいけません。

関連する問題