GNU/Linux >> Linux の 問題 >  >> Linux

Linux の make コマンドと例

はじめに

Linux make コマンドは、システム管理者と開発者がよく使用するユーティリティです。このコマンドはコンパイル プロセスを支援し、大規模なアプリケーションを構築するための必須ツールです。このユーティリティは繰り返しを省き、コンパイルを高速化し、時間を節約します。

この記事では、Linux make の使い方を紹介します。 コマンドと例。

前提条件

  • ターミナルへのアクセス
  • make 機能がインストールされました。
  • テキスト エディタ

注: make の場合 はシステムで利用できません。sudo apt install make を使用してください .

make コマンドはどのように機能しますか?

make コマンドは、さまざまなプログラム部分をコンパイルし、最終的な実行可能ファイルを構築します。 make の目的 ファイルのコンパイルを自動化して、プロセスをより簡単にし、時間を節約することです。

このコマンドは、シェル コマンドでコンパイラを実行できる限り、任意のプログラミング言語で機能します。

いくつかのファイルを操作する場合、コンパイルは簡単です。したがって、このプロセスには、コンパイラーの呼び出しとファイル名のリストが含まれます。

たとえば、3 つのファイル (file1.c) から C プログラムをコンパイルするには 、file2.cfile3.h ):

次のコマンドでコンパイラを呼び出します:

gcc file1.c file2.c file3.h

gcc コマンドは a.out を作成します 標準のコンパイル済み実行可能ファイルです。

ただし、ソース ファイルの 1 つを変更するには、すべてを再コンパイルする必要があり、大規模なアプリを操作する場合はさらに複雑になります。 make コマンドはプロセスを自動化し、ユーザーがすべてのファイルを再コンパイルすることなく、変更が必要な部分のみを更新できるようにします。

make コマンドは、ユーザーが生成したファイル Makefile を使用して、プログラムの一部をコンパイルします。初回実行時 make ファイルの説明や変更時刻などの命令を Makefile から検索します。利用可能なデータに基づくと、make 更新が必要なファイルを決定し、必要なコマンドを発行します。

メイクファイルとは

Makefile は、make を指示する一連のルールを含むテキスト ファイルです。 アプリケーションの構築方法。ルールは次の 3 つの部分で構成されます:ターゲット依存関係 、およびコマンド .

Makefile の基本的な構文は次のとおりです:

target: dependencies
<TAB> commands

構文の一部は次のとおりです:

  • ターゲット . make の実行後に作成または更新されるファイルの名前 .
  • 依存関係 .ターゲットが構築されるファイルの名前 (スペースで区切られている)。
  • コマンド .依存関係が変更されたときにターゲットを作成または更新する方法を説明するルール

1 つの Makefile には、いくつかのルール セットがあります。 最初のルールがデフォルトのルールです そして、まだ作成されていないオブジェクト ファイル (依存関係) から最終的な実行可能ファイル (ターゲット) を作成する方法を示します:

この場合の構文は次のとおりです:

EXECUTABLE: Object file 1, Object file 2
<TAB> commands

注: Makefile のコマンドは常に TAB の後に来ます 鍵。そうしないと、コマンドは機能しません。

ルール 1 を設定した後、ユーザーはオブジェクト ファイルの作成方法に関する指示を追加します。

make コマンドは、ソース ファイルをオブジェクト ファイルにコンパイルしてから、オブジェクト ファイルをターゲット ファイル (最終的な実行可能ファイル) にコンパイルすることによって機能します。上記の 3 つの規則を使用した Makefile の構文は次のとおりです。

EXECUTABLE: Object file 1, Object file 2
<TAB> commands

Object file 1: Source file 1, Source file 2
<TAB> commands

Object file 2: Source file 2
<TAB> commands

Linux の make コマンド構文

基本的な make 構文は次のようになります:

make [OPTIONS]

引数なしで実行すると、make Makefile から最初のターゲットをビルドします。

Linux make コマンド オプション

make コマンドは、その有効性、多様性、および特定のアクションを実行する機能により、広く使用されています。コマンドはオプションなしで実行すると結果を出力しますが、引数を追加すると make が展開されます の 使いやすさ。

最もよく使用されるオプションは次のとおりです:

コマンド 説明
-B , --always-make すべてのターゲットを無条件にコンパイルします。
-d , --debug[=FLAGS] デバッグ情報を出力します。
-C dir , --directory=dir Makefile を実行する前にディレクトリを変更します。
-f file , --file=file , --Makefile=FILE 特定のファイルを Makefile として使用します。
-i , --ignore-errors コマンドのすべてのエラーを無視します。
-I dir --include-dir=dir 指定した Makefile を検索するディレクトリを指定します。
-j [jobs] --jobs[=jobs] 同時に実行するジョブの数を指定します。
-k --keep-going ma​​ke を実行し続けます エラーが発生した後、できるだけ長く。
-l [load] , --load-average[=load] 他のタスクがキューにある場合、新しいタスクを開始しないことを指定します。
-n , --dry-run , --just-print --recon ma​​ke を実行せずに期待される出力を出力します .
-o file --old-file=file , --assume-old=file make であることを保証します 依存関係よりも古いファイルであっても、ファイルを再作成しません。
-p , --print-data-base Makefile を読み取った後に生成されたデータベースを出力します。
-q , --question make の質問モードを有効にします コマンドを実行しませんが、ターゲットが既にコンパイルされている場合は終了ステータス 0 を返します。
-r , --no-builtin-rules 組み込みの暗黙のルールを排除します。
-s --silent --quiet 実行時にコマンドを出力することを制限します。
-S , --no-keep-going --stop -k」を停止 , --keep-going "コマンド。
-t --touch コマンドを実行する代わりにファイルに触れます。
--trace 各ターゲットの性質を追跡します。
-W file --what-if=file --new-file=file , --assume-new=file ターゲット ファイルが変更されているという事実を無視します。
--warn-undefined-variables 不明な変数が参照されていることを警告します。

Linux make コマンドの例

make を理解するための最良の方法 Makefile は、単純なプログラムでコマンドとさまざまなオプションを実行することによって行われます。

たとえば、"Learn about Makefiles" というメッセージを出力する実行可能ファイルをビルドするには、 、次の手順に従ってください:

1. Test という名前のディレクトリを作成します .

2. 3 つのソース ファイル ma​​in.c を作成します。 、text.c 、および text.h :

  • ma​​in.c - main 関数を含むファイルです (int main ) 別のファイルから関数を呼び出します。
  • text.c - は印刷したい "Learn about Makefiles!" を含むファイルです。
  • text.h - 関数の宣言を含むヘッダー ファイルです。ヘッダーは両方の c に含まれています #include を含むファイル ヘッダーの内容をコピー/貼り付けするのと同じ目的を持つ引数。

次のセクションでは、make の一般的な使用例をいくつか示します。 上記の 3 つのファイルの Makefile

注: 以下の例は C 言語で書かれています。

プログラムを作成

プログラムを作成するには 2 つの方法があります:

  • gcc コンパイラを呼び出して、標準的な方法でファイルをコンパイルします。この方法は、小規模なプログラムに適しています。
  • make と Makefile の使用。

gcc コンパイラでプログラムを作成する

gcc コンパイラは単純なプログラムにのみ使用してください。それ以外の場合は、多数のファイルを操作するときに Makefile を使用してください。

コンパイラでプログラムを作成するには:

1. ターミナルを開き、ファイルを含むディレクトリに移動します。

2. gcc を呼び出す コンパイラを開き、両方の c の名前を入力します ファイル。 c に既に含まれているため、ヘッダーはコンパイルされません。 ファイル。

gcc main.c text.c

3. 現在のディレクトリ内のすべてのファイルを ls で一覧表示します コマンド:

ls

ターミナルは、新しい実行可能ファイル a.out を示しています ファイルが作成されます。実行可能ファイルは、ファイル エクスプローラーでも表示されます:

コンパイルが成功したかどうかをテストするには、実行可能ファイルを呼び出します:

./a.out

ターミナルは、実行可能ファイルが正常に動作することを示しています。

Make と Makefile を使用してプログラムを作成する

make でファイルをコンパイルする Makefile は、コンパイラを使用するよりも簡単です。まず、同じディレクトリに新しいテキスト ドキュメントを作成し、Makefile という名前を付けます。 または makefile .

ファイルを開き、基本的な Makefile 構文をガイドラインとして使用します。

1. 新しい実行可能ファイルの名前をターゲットとして入力します (例:my_app.)。

2. オブジェクト ファイル ma​​in.o を追加します および text.o 依存関係として。 make コマンドは、オブジェクト ファイルが変更されるたびにターゲットを再コンパイルします。

3. TAB キーを押します gcc を呼び出します オブジェクト ファイルのコンパイラ:

<TAB> gcc main.o text.o

4. -o を追加します フラグを付けて、ターゲットに my_app という名前を付けます。

最初のルールを記述した後、Makefile は次のようになります:

my_app: main.o text.o
<TAB> gcc main.o text.o -o my_app

次に、Makefile に作成方法を指示します。 ma​​in.o :

1. ma​​in.o を設定します

2. ma​​in.c と入力します 依存関係として。 ma​​in.c ma​​in.o の作成と更新に役立ちます .

3. 次のコマンドを記述して、ma​​in.o を更新します。 毎回 ma​​in.c 変更:

gcc -c main.c

4. -c を追加します 新しい実行可能ファイルを作成するのではなく、コードを読み取ってオブジェクト ファイルをコンパイルするだけにするよう Makefile に指示するフラグ。

main.o: main.c
<TAB> gcc -c main.c

text.o を作成するには 、そのファイルをターゲットとして設定し、両方の text.c を追加します および text.h 依存関係として。ただし、gcc コマンドは text.c のみをコンパイルします ファイル、ヘッダーはコンパイルされないため:

text.o: text.c text.h
<TAB> gcc -c text.c

Makefile を保存して make と入力します

make コマンドは 2 つのオブジェクト ファイルを作成しました (ma​​in.o および text.o ) と実行可能ファイル (my_app ).

make が新しいファイルを作成したことを確認するには、ls を実行します。 もう一度:

ターミナルは、コマンドを実行すると my_app が作成されたことを示しています . my_app を実行するには ファイル、タイプ:

./my_app

プログラムを更新

1 つのソース ファイルが変更されると、make そのソースファイルに応じてオブジェクトファイルのみを更新します。たとえば、my_app の実行時に表示されるテキストを変更するには from "メイクファイルについて学ぶ " から "私はどこにいますか ?":

1. text.c を開きます テキスト エディタで:

2. テキストを "Where am I?" に変更します。 :

3. ファイルを保存し、ターミナルを開いて make を実行します :

make コマンドが text.c の変更を検出しました そのファイルだけを再コンパイルしました。

変更を確認するには、実行可能ファイルを実行します:

./my_app

すべてのファイルをコンパイル

変更されたファイルだけでなく、すべてのファイルをコンパイルするには、-B を使用します または --always-make オプション。

たとえば、text.c のテキストを変更するには ファイルを 「Makefile について学ぶ」 に戻します ファイルを保存し、次のように入力します:

make -B

出力は make であることを示しています 変更されていないものも含め、フォルダー内のすべてのファイルをコンパイルしました。

オブジェクト ファイルの消去

ユーザーが make を実行したとき 初めて、コマンドはオブジェクト ファイルと実行可能ファイルを作成します。したがって、ソース フォルダーを整理してオブジェクト ファイルをクリーンアップするには、clean を追加します。 関数を Makefile に追加:

clean:
<TAB> rm *.o my_app

コマンドは以下で構成されます:

  • 依存関係のないクリーンなターゲット - ターゲットは常に時代遅れと見なされ、常に実行されます。
  • rm コマンド - 指定されたオブジェクトを削除します。
  • *.o 一部 - o の付いたファイルに一致します オブジェクト ファイルと my_app を消去します .

オブジェクト ファイルを消去するには、次を実行します:

make clean

ls を実行した後 ターミナルには、オブジェクト ファイルと my_app が表示されます。 削除されました。

デバッグ モードで make を実行

make を実行 デバッグモードで、コンパイルプロセスに関する追加情報を出力します。 make を実行 -d デバッグ出力を表示するオプション:

make -d

メイクファイルとして別のファイルを使用する

デフォルトでは、make 現在のディレクトリで Makefile または makefile という名前のファイルを探します。別のファイルを使用するには、次を実行します:

make -f [file_name]

たとえば、Makefile の名前が my_file の場合 、実行:

make -f my_file

変数を使用する

Makefile の変数は、複数のファイル名、引数、ターゲット、依存関係、コマンド、ソース ディレクトリ、またはその他の項目を表します。さらに、変数は名前で定義され、変数の値と呼ばれるテキストの文字列を表します。

変数を定義するには、= を使用します .たとえば、gcc に置き換えます。 変数 C.

C=gcc

my_app: main.o text.o
<TAB> $ (C) main.o text.o -o my_app

main.o:main.c
<TAB> $ (C) -c main.c
        
text.o: text.c text.h
<TAB> $ (C) -c text.c

make 実行時 ターミナルでは、コマンドは C を読み取ります gcc の変数 :

結論

このチュートリアルの例を見れば、make の使い方がわかります。 Linux のコマンドとその仕組み

次に、Linux コマンド チート シートをダウンロードして、その他の重要な Linux コマンドを学習してください。


Linux
  1. Linuxでの並べ替えコマンドと例

  2. Linuxでのchattrコマンドと例

  3. Linux での file コマンドの例

  1. 例を含むwcLinuxコマンド

  2. LinuxでのJQコマンドと例

  3. Linux での ln コマンドの例

  1. 例を含む10のクイックLinuxテールコマンド

  2. Linuxipコマンドと例

  3. 15Linuxpsコマンドと例