Re: make contest
1 октября 2008 г. 19:41 пользователь Artem Chuprina <ran@ran.pp.ru> написал:
> Дерево проекта:
>
> 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
Reply to: