For simple projects that distribute all files in the same directory it is enough to have a single Makefile.am that builds everything in place.
In larger projects it is common to organize files in different
directories, in a tree. For instance one directory per program, per
library or per module. The traditional approach is to build these
subdirectories recursively: each directory contains its Makefile
(generated from Makefile.am), and when
make is run
from the top level directory it enters each subdirectory in turn to
build its contents.