Makefile-再コンパイル

ザ・ makeプログラムはインテリジェントなユーティリティであり、ソースファイルで行った変更に基づいて機能します。main.cpp、hello.cpp、factorial.cpp、functions.hの4つのファイルがある場合、残りのすべてのファイルはfunctions.hに依存し、main.cppはhello.cppとfactorial.cppの両方に依存します。したがって、functions.hに変更を加えると、makeすべてのソースファイルを再コンパイルして、新しいオブジェクトファイルを生成します。ただし、main.cppに変更を加えると、これは他のファイルに依存しないため、main.cppファイルのみが再コンパイルされ、help.cppとfactorial.cppは再コンパイルされません。

ファイルのコンパイル中に、 makeオブジェクトファイルをチェックし、タイムスタンプを比較します。ソースファイルのタイムスタンプがオブジェクトファイルよりも新しい場合、ソースファイルが変更されたと想定して新しいオブジェクトファイルが生成されます。

再コンパイルの回避

何千ものファイルで構成されるプロジェクトが存在する可能性があります。ソースファイルを変更したが、それに依存するすべてのファイルを再コンパイルしたくない場合があります。たとえば、他のファイルが依存するヘッダーファイルにマクロまたは宣言を追加するとします。保守的で、make ヘッダーファイルの変更にはすべての依存ファイルの再コンパイルが必要であると想定していますが、それらは再コンパイルの必要がなく、コンパイルを待つ時間を無駄にしたくないことを知っています。

ヘッダーファイルを変更する前に問題が予想される場合は、「-t」フラグを使用できます。このフラグはmakeルール内のコマンドを実行するのではなく、最終変更日を変更してターゲットを最新の状態にマークします。この手順に従う必要があります-

  • コマンド `make 'を使用して、本当に再コンパイルが必要なソースファイルを再コンパイルします。

  • ヘッダーファイルに変更を加えます。

  • コマンド `make -t 'を使用して、すべてのオブジェクトファイルを最新としてマークします。次にmakeを実行するとき、ヘッダーファイルの変更によって再コンパイルが発生することはありません。

一部のファイルの再コンパイルが必要なときにヘッダーファイルを既に変更している場合は、これを行うには遅すぎます。代わりに、指定したファイルを「古い」としてマークする「-ofile」フラグを使用できます。つまり、ファイル自体は再作成されず、そのアカウントで他に何も再作成されません。この手順に従う必要があります-

  • `make -o header file 'を使用して、特定のヘッダーファイルとは関係なく、コンパイルが必要なソースファイルを再コンパイルします。複数のヘッダーファイルが含まれる場合は、ヘッダーファイルごとに個別の「-o」オプションを使用してください。

  • `make -t 'を使用してすべてのオブジェクトファイルを更新します。