1 октября 2008 г. 19:41 пользователь Artem Chuprina <[EMAIL PROTECTED]> написал: > Дерево проекта: > > dirA > Makefile > dirB > Makefile > b.c > c.c > > Makefile в dirA собирает пакет. Допустим, для простоты a.tar.gz. Он > туда кладет dirB/b и dirB/c, которые собирает путем компиляции из b.c и > c.c соответственно dirB/Makefile. То есть, внимание, результатом работы > dirB/Makefile (тем самым бинарником, о котором ты говоришь выше) > являются только dirB/b и dirB/c. dirB/b.c НЕ является результатом его > работы. И нафиг не нужен при пакетировании. > > Все очень просто. > > Собственно задача: написать мейкфайлы так, чтобы каждый выполнял свою > работу (dirB/Makefile создавал dirB/b и dirB/c, dirA/Makefile - > a.tar.gz). Чтобы при этом при изменении b.c и запуске make all > (внимание на имя цели!) в dirA пересобирался dirB/b и a.tar.gz. А > dirB/c не пересобирался (поскольку c.c не менялся). Чтобы при этом > сборка работала, разумеется, путем запуска make all в dirA "с чистого > листа", т.е. при отсутствии в dirB бинарников. И чтобы при запуске make > all (внимание, то же самое имя цели!) в dirB собирались b и с. Тоже > соответственно зависимостям (ну, само по себе это просто). > Дополнительные файлы в проект добавлять можно (я, ага, хочу, чтобы > задача все же имела решение).
Не понял в чём подвох. ./dirA ./dirA/Makefile all: make -C ../dirB @if test -f ../dirB/rebuild; then tar czf a.tar.gz ../dirB/b ../dirB/c && rm ../dirB/rebuild; fi ./dirB ./dirB/c.c ./dirB/b.c ./dirB/Makefile all: b c %: %.c cc -o $* $< @touch rebuild -- Regards, Yuri Kozlov