# 10.3 Makefile 结构

Source tree 中的 Makefile 使用了递归的机理来运行相对的子树中的 make 目标。递归通过 `REC_TARGETS` 和 `SUBDIR` 变量来控制，递归过程在 `Makefile.global` 中执行。任何加入到 `REC_TARGETS` 中的变量都将在所有的在 `SUBDIR` 中的目录中被递归地调用。 此外，目标的带有 `-l` 后缀的本地变种将会在递归到子目录后被调用，因此递归是深度优先的。

`dist, clean, distclean, maintainer-clean` 目标默认是递归的，也就是说这些变量将会在所有的含有 Makefile 的目录中调用他们的本地（local） `-l` 变种。这样真正的深度优先才可以被执行。深度优先对正确运行 `*clean` 目标是必须的，否则，举个例子， `path.mk` 将会在调用子目录 `*clean` 目标之前被删除，但是他包含了 `*clean` 所要以来的信息。
