[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

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: