Makefile-rules

提供:Dev Guides
移動先:案内検索

Makefileでのルールの定義

Makefileのルールを学習します。

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

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

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

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

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

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

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

*Make* は、いずれかのコマンドが失敗ステータスを返すと終了します。 そのような場合、次のルールが表示されます-
clean:
   -rm *.o *~ core paper
*Make* は、ダッシュで始まるコマンドラインで返されたステータスを無視します。 たとえば、コアファイルがない場合は誰が気にしますか?
*Make* は、マクロ置換の後、何が起こっているかを示すためにコマンドをエコーし​​ます。 時々、それをオフにしたいかもしれません。 たとえば-
install:
   @echo You must be root to install

人々は、Makefileの特定のターゲットを期待するようになりました。 常に最初に参照する必要があります。 ただし、ターゲットall(またはmakeのみ)、install、およびcleanが検出されることを期待するのは合理的です。

  • make all -アプリケーションをインストールする前にローカルテストを実行できるように、すべてをコンパイルします。
  • make install -アプリケーションを適切な場所にインストールします。
  • make clean -アプリケーションをクリーンアップし、実行可能ファイル、一時ファイル、オブジェクトファイルなどを取り除きます。

Makefileの暗黙のルール

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

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

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

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

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

alternatively

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