ローカルディレクトリとサブディレクトリの両方で同一の動作を行うターゲットを、再帰的なターゲットと呼びます。
厳密には、ターゲット自身の名前を引数として指定して make を呼び出すターゲットは、すべて再帰的です。ただしここでは、入れ子になった動作とローカルの動作の両方を持つターゲットのみを「再帰的なターゲット」と呼びます。入れ子にした動作のみを持つターゲットは、「入れ子にしたターゲット」と呼びます。
再帰的なターゲットを含むメークファイルは、再帰的なメークファイルと呼びます。
以下の例の all の場合は、入れ子にした依存関係は NESTED_TARGETS、ローカルの依存関係は LOCAL_TARGETS です。
NESTED_TARGETS= debug test install
SUBDIRS= bin lib
LOCAL_TARGETS= functions
all: $(NESTED_TARGETS) $(LOCAL_TARGETS)
$(NESTED_TARGETS):
@ for i in $(SUBDIRS) ; ¥
do ¥
echo "Current directory: $$i" ;¥
cd $$i ; ¥
$(MAKE) $@ ; ¥
cd .. ; ¥
done
$(LOCAL_TARGETS):
@ echo "Building $@ in local directory."
(local directory commands)
入れ子にした make も、最下位の階層にある場合を除き、再帰的である必要があります。末端のディレクトリ (サブディレクトリを持たないディレクトリ) のメークファイルでは、ローカルターゲットのみを構築します。