[Linux の基本] make、Makefile 自動ビルド ツール

ここに画像の説明を挿入します

1. make と Makefile とは何ですか?

Make はコマンド、Makefile は現在のディレクトリに存在する特定の形式のテキスト ファイルです。

2. なぜ make と Makefile が必要なのでしょうか?

VS コンパイラでは、コードをコンパイルして実行するときに ctrl+f5 で十分です。Linux では、コンパイルを完了するには、gcc/g++ をオプションと正しい形式で使用する必要があります。これは比較です。面倒です。 make と Makefile はコードを自動的にビルドできます。コードを作成するとき、ファイル全体の自動コンパイルを完了するために必要な make コマンドは 1 つだけです。
gcc を記述するときにエラーが発生する可能性がありますが、gcc をファイルに直接書き込み、一度正しく書き込んで、後で直接使用することができます。
これも同様で、一度正しく記述し、後で直接使用します。

3. Makefile の実装方法

まず、メイクファイル ファイルを作成します。ここでのメイクファイルの単語は、エラーなく正しく入力する必要があります。最初の文字 m は大文字でも小文字でも構いません。ここでは大文字です。

touch Makefile/makefile //首字母m大写/小写都可以 

ここに画像の説明を挿入します

3.1 Makefile の書き方

Makefile は、現在のディレクトリにある通常のテキスト ファイルです。コンテンツには依存関係と依存メソッドが含まれています
まず Makefile を入力し、次の内容を入力します。

test:test.c
    gcc -o test test.c     

注: gcc コマンド ラインに入るときは、Tab キーを使用する必要があります。

3.1.1 依存関係

上記の Makefile では、test は test.c に依存します。

3.1.2 依存関係のメソッド

上記の Makefile では、 gcc -o test test.c が依存メソッドです。

3.2 プロジェクトをクリーンアップする方法

3.2.1 書き方

まずMakefileに入り、以下の内容を入力します。

.PHONY:clean
clean:
	rm -f test

![ここに画像の説明を挿入](https://img-blog.csdnimg.cn/9d876e620e5f4da093328519e74993e1

3.2.2 クリーンの詳細説明

  • プロジェクトをクリーンアップする必要がある
  • clean と同様、最初のターゲット ファイルに直接的または間接的に関連付けられていない場合、その後に定義されたコマンドは自動的に実行されませんが、make が実行されることを示すことができます。つまり、「make clean」コマンドは、再コンパイルのためにすべてのターゲット ファイルをクリアするために使用されます。
  • しかし、通常、クリーンなターゲット ファイルの場合は、それを擬似ターゲットとして設定し、.PHONY で変更します。擬似ターゲットの特徴は、 が常に実行されることです (依存メソッドは常に実行され、いかなる状況によっても中断されません)。

3.3 make の使用

Makefile を作成した後、make を直接入力してコードを自動的にコンパイルできます。

実行可能ファイルをクリーンアップする場合は、make clean と入力します。
ここに画像の説明を挿入します
Makefile で最初にクリーンアップを記述すると、make と入力することでクリーンアップ作業が実行されるため、最初に作成した人が実行されます。
ここに画像の説明を挿入します

通常、クリーンアップ作業はビルドの最後に記述します。

3.4 原則

1. make は、現在のディレクトリで「Makefile」または「makefile」という名前のファイルを検索します。
2. 見つかった場合は、ファイル内の最初のターゲット ファイル (ターゲット) が見つかります。上記の例では、ファイル「test」が見つかり、このファイルが最終ターゲット ファイルとして使用されます。 。
3. テスト ファイルが存在しない場合、またはテストが依存する test.c ファイルのファイル変更時刻がテスト ファイルより新しい場合 (タッチを使用してテストできます)、後で定義したコマンドが実行されてテストファイルが生成されます。
4. これは make 全体の依存関係です。Make は、最初のターゲット ファイルが最終的にコンパイルされるまで、ファイルの依存関係をレイヤーごとに検索します。
5. 検索プロセス中に、最後の依存ファイルが見つからないなどのエラーが発生した場合、make は直接終了し、エラーを報告します。定義されたコマンドのエラーについては、コンパイルは失敗し、make は単にそれを無視します。
6. Make はファイルの依存関係のみを考慮します。つまり、依存関係を見つけた後もコロンの後のファイルが存在しない場合は、申し訳ありませんが動作しません。 。

3 番目の点は混乱を引き起こす可能性があります。これが実際に意味することは、実行可能ファイルを生成した後、test.c ソース ファイルを変更するということです。test.c の内容変更した場合は、再度 make を実行すると、 新しい実行可能プログラムが生成されます。内容が更新されない場合は、依存メソッドを実行する必要はありません。これは 2 つのファイルの時間に基づく比較です。ソース ファイルの時間が実行可能ファイルの時間より大きい場合、ソース ファイルは更新されます。本質は、依然として、ソースファイルの内容が変更されているため、ここでの比較は変更時間です。

ここに画像の説明を挿入します
この時点ではソースファイルは更新されていないため、再度生成すると「テストが最新です」というエラーが報告されます。

3.4.1 ファイル変更時刻の表示

ファイルの変更時刻を表示するには、stat コマンドを使用します。

stat 文件名

ここに画像の説明を挿入します
ここには 3 つの時間があり、Access、Modify、Change は ACM 時間とも呼ばれます。

アクセス: ファイルが読み取られたか入力された時刻
変更: ファイルの内容が最後に変更された時刻
変更: ファイルの内容が最後に変更された時刻ファイル属性が変更されました a>

ソース ファイルの内容を変更すると、それに応じて変更時間も変更されます。このとき、ファイル内容の変更により属性 (ファイルのサイズなど) も変更されるため、変更時間も変更される可能性があります。ファイル)のため、変更時間が変更される可能性があります。
Make は、ソース ファイルの変更時刻と実行可能ファイルの時刻を比較して、依存するメソッドを再実行するかどうかを選択します。
ここに画像の説明を挿入します
ここでは、ソース ファイルの変更時間が実行可能ファイルの変更時間よりも長いことがわかります。この時点で make が実行されると、依存するメソッドが再実行され、新しい実行可能ファイルが作成されます。生成される。
ここに画像の説明を挿入します
ここに画像の説明を挿入します
この時点では、実行可能ファイルの Modify 時刻がソース ファイルの MODify 時刻よりも大きいため、make の実行は無効になります。 =4> 指定された時刻のみを変更することもできます。

touch -选项 文件名

ここに画像の説明を挿入します
ここでアクセス/変更時間を変更することを選択した場合、時間も属性の 1 つであり、属性が変更されると変更時間も変更されるため、変更時間もそれに応じて変更されます。
一般に、ファイルは非常に頻繁に読み取られます。ファイルはディスクに保存されます。各変更時間の本質はディスクにアクセスすることであり、非効率的です。ファイルが毎回アクセスされる場合、アクセス時間を更新すると、Linux システムはディスクにアクセスするための IO 操作が大量に発生し、システム効率が隠れて低下するため、アクセス時間を変更し、回数制限を追加します。

おすすめ

転載: blog.csdn.net/Ljy_cx_21_4_3/article/details/133993583