Тестовое задание Itiviti ======================== Реализовать рекурсивный обход дерева проектов на GNU make. Есть иерархически организованное дерево проектов: src/ libraries/ storage/ transport/ util/ servers/ trading/ fix/ market_data/ fix/ В каждой директории есть Makefile, описывающий сборку данного проекта, например src/servers/trading/fix/Makefile: ------- NAME = trading_fix DRIVER = executable DEPENDS = src/libraries/storage src/libraries/transport ------- или src/libraries/transport/Makefile: ------ NAME = transport DRIVER = dynamic-library DEPENDS = src/libraries/util ------- или src/servers/Makefile: ------ NAME = servers DRIVER = subdir SUBDIRS = trading market_data ------ Т.е. указывается имя собираемого проекта (NAME), как его собирать (DRIVER) и список зависимостей (DEPENDS). Для DRIVER=subdir в переменной SUBDIRS перечисляются подпроекты. "Рекурсивная" сборка включает в себя сборку всех зависимостей проекта (подпроектов для DRIVER=subdir). Например, сборка src/servers/trading/fix вызовет сборку следующих проектов: src/libraries/util src/libraries/transport src/libraries/storage src/servers/trading/fix Задача: написать рекурсивный обход дерева проектов на языке GNU make. Т.е. запуск $ make -C src/servers/trading/fix должен вывести нечто вроде Building dynamic-library src/libraries/util Building dynamic-library src/libraries/transport Building dynamic-library src/libraries/storage Building executable src/servers/trading/fix Каждый проект при этом должен собираться не более одного раза.