Фишка в том, что make позволяет делать больше чем от него часто требуют. Почему то упускают его возможности работы с каталогами, списками файлов, зависимостями...
Мой вариант makefile состоит из:
config.mk (конфигурация проекта) - название проекта - нестандартные пути и ключи (утилит) - прочие мелочи...
base.mk (универсальный, _общий_ для всех проектов на данной платформе) - автоматическое получение списков файлов - автоматическое получение зависимостей - все правила и цели
Данная конструкция работает на проектах win, qnx, bsd, mb90 и т.д., причем base.mk нескольких платформ отличаются друг от друга только лишь именами вызываемых компилляторов(и т.п.)
Итог: makefile _вообще_ больше не пишется, только конфигурируется, при кардинальных изменениях проекта.
Но!, для универсальных проектов необходима устоявшаяся архитектура проектов, это отдельная тема для разговора.
А еще есть autoconfig, automake... ;-), это не для слабонервных.
_______ Сергей.