Makefileでのルールの定義

ここで、Makefileのルールを学習します。

Makefileターゲットルールの一般的な構文は次のとおりです。

target [target...] : [dependent ....]
[ command ...]

上記のコードでは、括弧内の引数はオプションであり、省略記号は1つ以上を意味します。ここで、各コマンドの前に付けるタブが必要であることに注意してください。

簡単な例を以下に示します。ここでは、他の3つのファイルからターゲットをhelloにするルールを定義しています。

hello: main.o factorial.o hello.o
   $(CC) main.o factorial.o hello.o -o hello

NOTE −この例では、ソースファイルからすべてのオブジェクトファイルを作成するためのルールを指定する必要があります。

セマンティクスは非常に単純です。「ターゲットを作る」と言うと、make適用されるターゲットルールを見つけます。そして、扶養家族のいずれかがターゲットよりも新しい場合、makeコマンドを一度に1つずつ実行します(マクロ置換後)。扶養家族を作る必要がある場合、それが最初に起こります(したがって、再帰があります)。

Makeコマンドが失敗ステータスを返すと終了します。このような場合、次のルールが表示されます-

clean:
   -rm *.o *~ core paper

Makeダッシュで始まるコマンドラインで返されたステータスを無視します。たとえば、コアファイルがないかどうかは誰が気にしますか?

Makeマクロ置換後、コマンドをエコーし​​て、何が起こっているかを示します。時々それをオフにしたいかもしれません。例-

install:
   @echo You must be root to install

人々はMakefileで特定のターゲットを期待するようになりました。常に最初に閲覧する必要があります。ただし、ターゲットがすべて(または単に作成)、インストール、およびクリーンアップされることを期待するのは合理的です。

  • make all −アプリケーションをインストールする前にローカルテストを実行できるように、すべてをコンパイルします。

  • make install −適切な場所にアプリケーションをインストールします。

  • make clean −アプリケーションをクリーンアップし、実行可能ファイル、一時ファイル、オブジェクトファイルなどを削除します。

Makefileの暗黙のルール

このコマンドは、ソースコードx.cppから実行可能ファイルxを作成するすべての場合に機能するはずです。これは暗黙のルールとして述べることができます-

.cpp:
   $(CC) $(CFLAGS) [email protected] $(LDFLAGS) -o $@

この暗黙のルールは、xcからxを作成する方法を示しています-xcでccを実行し、出力xを呼び出します。特定のターゲットが言及されていないため、ルールは暗黙的です。すべての場合に使用できます。

もう1つの一般的な暗黙のルールは、.cpp(ソースファイル)から.o(オブジェクト)ファイルを作成することです。

.cpp.o:
   $(CC) $(CFLAGS) -c $<

alternatively

.cpp.o:
   $(CC) $(CFLAGS) -c $*.cpp