Re: Чем плох рекурсивный make?
Dmitry E. Oboukhov -> debian-russian@lists.debian.org @ Wed, 1 Oct 2008 12:24:24 +0400:
AC>> make, напомню, в отличие от gcc, вызывают не только чтобы собрать цель,
AC>> но и чтобы _пере_собрать ее.
DEO> gcc вызывают не только для того чтобы собрать .o, но и пересобрать .o
DEO> нет отличий
gcc вызывают для того, чтобы сделать новый .o _вместо_ старого. Он про
старый вообще не думает, он его молча затирает. make - думает. Если
это не отличие, то ты не в курсе, зачем нужен make.
AC>> С минимальными затратами. Он именно для
AC>> этого придуман, иначе он был бы нафиг не нужен, шелловский скрипт,
AC>> начинающийся с set -e, того же результата достигает куда проще и с куда
AC>> меньшими возможностями ошибок.
DEO> каждая тулза для чего-то задумана
DEO> шелл - для простоты склейки работы разных утилит
DEO> make - для простоты сборки
make как раз усложняет сборку по сравнению с тупым шелловским скриптом.
Но удешевляет ее за счет этого.
AC>> Он, конечно, _заодно_ позволяет и собрать цель, но это, прямо
AC>> скажем, не основное его назначение, а именно что побочный эффект.
AC>> Так вот, рекурсивный вызов make ломает его основную
AC>> функциональность. Побочную, правда, сохраняет.
DEO> вызов внешнего make - нерекурсивный
DEO> и ничего не ломает
Ты не подумал о том, о чем я тебя просил подумать? Или подумал, но не
понял?
AC>> Кстати, грабель подобного типа в дебиановских пакетах мне попадалось.
AC>> Я, правда, заранее знаю, что они там есть... Но, в частности, мне
AC>> попадался пакет, который не собирался с первой попытки, а собирался
AC>> только со второй... Причем стараниями мейнтейнера, а не автора
AC>> апстрима...
DEO> а сколько пакетов собираются с первой попытки но не собираются со
DEO> второй...
Это как раз существенно более типичная иллюстрация к recursive make
considered harmful. Но в натуре, как правило вот ровно к этому.
--
Artem Chuprina
RFC2822: <ran{}ran.pp.ru> Jabber: ran@jabber.ran.pp.ru
Reply to: