That said, this design seems needlessly inefficient. Instead of
recursively invoking with the correct makefile, why not just 'include'
that makefile?
Every time you recursively invoke make to do something, you
effectively tell make "for *this* target, forget everything you know,
flush the directory cache, ignore that you've already determined that
various files don't need to be built; if the question arises, do that
work all over again!" It's like people are afraid their build systems
will be too fast.