makeは、記述ファイル内のコマンド行を処理していく過程で、コマンド行に
make -f subprog.mk あるいは $(MAKE) -f subprog.mk のようなmakeの呼び出し指示があると、新しいmakeでこれを実行する機能がある。これをmakeの再帰的な呼び出し機能という。
project : dir1 dir2 dir3 echo "All make done..." dir1: cd dir1; \$(MAKE) -f dir1.mk dir2: cd dir2; \$(MAKE) -f dir2.mk dir3: cd dir3; \$(MAKE) -f dir3.mk
この例では、プロジェクトのディレクトリが3つに分かれていて、それぞれdir1、dir2、dir3というディレクトリの名前になっている。そして、書くディレクトリの下にはそれぞれのプログラムを作成するための記述ファイルが用意されている。ディレクトリdir1にはdir1.mkという名前の記述ファイルがあるとする。
この記述ファイルをmakeに指定して実行させると、まずターゲット名projectを見に行き、dir1、dir2、dir3に依存すると解釈する。そして、dir1のターゲットを作成しに行く。まず、cdコマンドでdir1に移動し新しいmakeでそこにあるdir1.mkファイルを実行していく。 この際汽笛名呼び出しで注意しなければいけないのが、新しいmakeを呼び出すと、今までに設定していたマクロ定義が引き継がれないことである。もし引き継ぎたい場合は次のようにする必要がある。
$(MAKE) -f dir1.mk "INCDIR = $(INCDIR)"