Re: Чем плох рекурсивный make?
- To: debian-russian@lists.debian.org
- Subject: Re: Чем плох рекурсивный make?
- From: Artem Chuprina <ran@ran.pp.ru>
- Date: Wed, 01 Oct 2008 10:53:07 +0400
- Message-id: <[🔎] 38360092@wizzle.medvedkovo.ran.pp.ru>
- Mail-followup-to: debian-russian@lists.debian.org
- In-reply-to: <20080930161613.GG12352@work.uvw.ru> (Dmitry E. Oboukhov's message of "Tue\, 30 Sep 2008 20\:16\:13 +0400")
- References: <62cd0edd0809300503x57d7e34bv31ec239138474e97@mail.gmail.com> <20080930121022.GA12352@work.uvw.ru> <02698583@tigger.lan.cryptocom.ru> <20080930125037.GD12352@work.uvw.ru> <04455200@tigger.lan.cryptocom.ru> <20080930161613.GG12352@work.uvw.ru>
Dmitry E. Oboukhov -> debian-russian@lists.debian.org @ Tue, 30 Sep 2008 20:16:13 +0400:
AC>>>>> PS: недавно вот sim'овский debian/rules перекроили выкинули
AC>>>>> рекурсию, получился изящщненький такой rules на полтора экрана
AC>>>>> размером, а был экранов на 7-8 да еще и с рекурсией продраться
AC>>>>> сквозь логику можно, но трудно
AC>>>> install-stamp:
AC>>>> dh_testdir
AC>>>> dh_testroot
AC>>>> make -C build-sim install DESTDIR=$(TMP_DIR)/sim
AC>>>> make -C build-sim-qt install DESTDIR=$(TMP_DIR)/sim-qt
AC>>>> Если это не рекурсия, то кто тогда рекурсия?
AC>>> рекурсия это
AC>>> debian/rules пара-переменных цель
AC>> Это - рекурсивный вызов makefile. А речь идет про рекурсивный вызов make.
DEO> гы, берем например /usr/bin там скриптов наверное треть
DEO> куча из них перевызввает друг друга (например docbook2html пока дойдешь
DEO> до ELF'а поседеешь :))
DEO> и что их кто-то называет рекурсивными? нет
Называют.
DEO> чем отличается вызов make из make от выозва скажем gcc?
DEO> ничем
DEO> в случае make собирается цель
DEO> в случае gcc собирается цель
make, напомню, в отличие от gcc, вызывают не только чтобы собрать цель,
но и чтобы _пере_собрать ее. С минимальными затратами. Он именно для
этого придуман, иначе он был бы нафиг не нужен, шелловский скрипт,
начинающийся с set -e, того же результата достигает куда проще и с куда
меньшими возможностями ошибок.
Он, конечно, _заодно_ позволяет и собрать цель, но это, прямо скажем, не
основное его назначение, а именно что побочный эффект. Так вот,
рекурсивный вызов make ломает его основную функциональность. Побочную,
правда, сохраняет.
Кстати, грабель подобного типа в дебиановских пакетах мне попадалось.
Я, правда, заранее знаю, что они там есть... Но, в частности, мне
попадался пакет, который не собирался с первой попытки, а собирался
только со второй... Причем стараниями мейнтейнера, а не автора
апстрима...
DEO> в первом случае можно опциями влиять на получаемый результат
DEO> во втором случае можно опциями влиять на получаемый результат
DEO> как хотите но я категорически против называния вызова стороннего
DEO> Make рекурсивным.
Хорошо, специально для тебя. Running make from make considered
harmful. В info make именно это называется recursive, но чего не
сделаешь для хорошего человека...
AC>>> вызов внешних make - это не рекурсия, это тоже самое что и вызов
AC>>> внешнего компилятора.
AC>> Нет. Домашнее упражнение: найти принципиальную разницу. Хинт:
AC>> внимательно осознать цели и задачи make.
DEO> нет принципиальной разницы
DEO> вызов make с другим makefile в данном случае - лишь один из видов
DEO> компиляторов:
DEO> цель собирает
DEO> код ошибки возвращает
Я недаром указал, что приведенное место - пример того, почему harmful.
Ты потрудись подумать, что там harmful. Для человека, как бы типа
ответственного за корректную сборку пакетов, это очень нелишнее
знание...
--
Artem Chuprina
RFC2822: <ran{}ran.pp.ru> Jabber: ran@jabber.ran.pp.ru
Юзер упорствует в хождении по граблям. Образовавшиеся шишки он считает
трудовыми мозолями. (С)энта
Reply to: