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