目次
プロジェクト内のソース ファイルはカウントされず、タイプ、機能、モジュールに応じて複数のディレクトリに配置されます。makefile は、どのファイルを最初にコンパイルする必要があるか、どのファイルを後でコンパイルする必要があるかを指定する一連のルールを定義します。コンパイル、およびさらに複雑な関数操作 makefile の利点は、「自動コンパイル」です。一度作成すると、必要な make コマンドは 1 つだけで、プロジェクト全体が完全に自動的にコンパイルされます。ソフトウェア開発の効率が大幅に向上します。
make/Makefile の概念と関係
make はコマンド、makefile はファイル (現在のソース パスの下) です。
Makefile は、依存関係と依存メソッドを中心に構築された自動コンパイル ツールです。
依存関係は、学生の頃のあなたと父親の関係に似ています。あなたは父親に依存して生きていますが、メイクファイルを使用するときに依存関係を示すことはできません。あなたは父親に電話し、自分が父親の息子であると言い、それから電話を切ります 道に迷った、あなたのお父さんも非常に混乱しています、あなたが何をしたいのかわかりません、あなたはお父さんに電話して、あなたは彼の息子(依存関係)であると言い、それからあなたが何をしたいのかを示すべきです(依存法)は、例えば、お父さんにあげてほしい、生活費を払ってほしい、生活費を払うという行為が依存法であり、依存関係と依存法が両方あって初めて一つのことが成り立ち、生活費はお父様からもらってます。依存関係と依存方法は対応しており、正しくなければなりません。お父さんに電話して宿題を頼むことはできませんし、他人のお父さんに電話して生活費を頼むこともできません。
make/Makefieの使用
現在のディレクトリに makefile または Makefile という名前のファイルを作成します。
vimエディタでMakefileを開く
make コマンドを使用して Makefile を実行します
上記のファイル test (test.o に依存)
test.o 、これは test.s に依存します
test.s 、 test.i に依存します
test.i 、 test.c に依存します
どうやって仕事をするのか?
- make は、現在のディレクトリで「Makefile」または「makefile」という名前のファイルを検索します。
- 見つかった場合は、ファイル内の最初のターゲット ファイル (target) が検索されます。上記の例では、ファイル "test" が検索され、このファイルが最終的なターゲット ファイルとして使用されます。
- テスト ファイルが存在しない場合、またはテストが依存する test.o ファイルのファイル変更時刻がテスト ファイルより新しい場合 (タッチでテスト可能)、後で定義したコマンドを実行してテストを生成します。ファイル文書。
- テストが依存する test.o ファイルが存在しない場合、make は現在のファイル内で test.o ファイルをターゲットとする依存関係を検索し、見つかった場合はそのルールに従って test.o ファイルを生成します。(これはスタックプロセスに少し似ています)
- c ファイルと h ファイルが存在する場合、make は test.o ファイルを生成し、その test.o ファイルを使用して、ファイル test を実行するという make の最終タスクを宣言します。
- これは make 全体の依存関係であり、make は最初のターゲット ファイルが最終的にコンパイルされるまで、ファイルの依存関係をレイヤーごとに検索します。
- 検索の過程で、最後の依存ファイルが見つからないなどのエラーが発生した場合、make は直接終了してエラーを報告し、定義されたコマンドのエラーやコンパイルの失敗は無視されます。
- make はファイルの依存関係のみを考慮します。依存関係を見つけた後もコロンの後のファイルが存在しない場合、make は実行されません。
プロジェクトを作成するときは、プロジェクトをクリーンアップする必要もあります。これも Makefile に記述されます。
clean と同様、最初のターゲット ファイルに直接的または間接的に関連付けられていない場合、その背後で定義されたコマンドは自動的に実行されませんが、make を表示して実行することはできます。つまり、再コンパイルのためにすべてのターゲット ファイルをクリアするコマンド「make clean」です。ただし、通常、クリーンなターゲット ファイルは、それを擬似ターゲットとして設定し、.PHONYで変更します。擬似ターゲットの特徴は、常に実行されることです。テスト オブジェクト ファイルを疑似ターゲットとして宣言することができます。
makeを繰り返し実行すると繰り返し実行できないことが分かりましたが、.PHONYの 変更を加えることで常に実行できるようになります。コンパイルは非常に時間がかかる作業なので、通常は更新されたファイルのみがコンパイルされますが、make を繰り返し実行してもコンパイルされたファイルが更新されない場合、make は実行されません。コンパイルには時間がかかりすぎ、クリーニング プロジェクトが追加される可能性があるため、生成された実行可能ファイルに .PHONY を追加しないことをお勧めします。
コンパイルすると、最初にソース コードが作成され、次に実行可能プログラムが作成されます。ソース コードの変更時刻は後になります。実行可能プログラムがソース コードの変更時刻よりも新しい場合、make コマンドは再度実行されません。 。make が実行されるかどうかは、ソースコードおよび実行可能プログラムの変更時期に依存します。
.PHONY は、ソースコードの変更時刻が実行可能プログラムの変更時刻よりも遅くなるように、ソースコードの変更時刻を更新し、常に make が実行できるようにします。