AC> Блин. Ты хочешь доказать мне, что можно придумать пример, где AC> рекурсивный вызов make не составляет проблем? Не вопрос, я и сам могу.
AC> Вопрос в том, что в типичном случае проблемы будут. А в том, где не
AC> будет, использование make - это из пушек по воробьям.
AC> Или тебе настолько не нравится слово "рекурсивный", что ты не можешь
AC> найти в себе сил выяснить, что оно значит в контексте обсуждаемой фразы
AC> из четырех английских слов?
[*] я вижу что описываемые проблемы растут не из "кривости" или
"рекурсивности" make а из неправильного применения инструмента.
AC>>> Шелловский скрипт unconditional сборки проекта проще соответствующего
AC>>> мейкфайла. Потому что надо описать только команды сборки, а на
AC>>> зависимости можно забить.
AC>> если ты на зависимости забьешь то у тебя не соберется
AC> Соберется. Я две строчки местами поменяю (несколько раз), и соберется.
ну так ты удовлетворишь зависимости этими двумя строчками потому и
соберется
AC>> а и shell'овским скриптом тоже можно смотреть на даты файлов и
AC>> сравнивать их.
AC>> разницы тут ровно столько что в одном языке одно действие сделать проще
AC>> чем в другом
AC> Ты слово unconditional не смог прочесть или найти в словаре?
и что это слово? (*)
AC> Объясняю. Берем (для примера урезанный, существенное сохранено) вариант
AC> того самого debian/rules, который тебе вроде как нравился.
AC> install: configure install-stamp
AC> install-stamp:
AC> make -C .. install DESTDIR=debian/tmp
AC> touch $@
AC> Выполнили один раз. Результат, допустим, не понравился.
AC> Изменяем проект (допустим, накладываем патч). Даже, допустим, собираем
AC> результат. Там же, в проекте. Запускаем debian/rules install, дабы
AC> заново собрать пакет (на самом деле, естественно, запускаем binary, а
AC> оно позовет install - там это будет в еще два шага, я их не привел).
AC> Вопрос. Какая версия будет в пакете в результате?
здесь как видно не собирался никто сделать повторную сборку ибо не нужна
понадобится - configure вынесется в отдельную цель и будет результат
всегда правильный
а наложение патчей на собственно make'ы, да потребует сделать clean, но
эту проблему можно будет решить поставив зависимость на сам Makefile.
где проблема-то? в том что решалась одна задача, а захотелось решить
попутно и другую? так давай ее впишем в ТЗ и решим? добавится пара целей
и депендсов и ничего не изменится :)
AC> Для особо невнимательных сразу ответ. Старая. В смысле - та, которая
AC> была, а не обновленная. Оно просто не попытается ничего инсталлировать.
AC> Почему? Да потому что ему неоткуда знать, что там что-то изменилось.
AC> Оно видит только, что есть файл install-stamp, а раз он есть, делать
AC> ничего не надо.
ну да, это ведь такая работа и задумана.
AC> Можно его изменить так, чтобы он гарантированно каждый раз собирал
AC> свежую версию.
смотри, если мы не делаем configure, а делаем
make
изменили что-то
make
изменили что-то
make
то оно ж в исходной (авторской) системе сборки отлично итеративно
собирает/линкует только изменения.
то есть поменяв зависимость (что типично для языка make) с install-stamp
на собираемые бинарники мы решим и ту задачу что тебе нужна (она была
просто не нужна в рамках этого make)
задачу мы решаем все теми же средствами make и что тут ломается
в идеологии непонятно.
AC> Но - фактически ценой отказа от функциональности make по
AC> анализу "что надо собирать, а что - нет".
а где отказ?
смотри, авторский make собирает N бинарников и M либ
в debian/rules мы вместо того чтобы ставить N+M зависимостей, нарисовали
один install-stamp, но можно на install-stamp просто в зависимости
прописать все бинарники и будет то же самое, только с полноценной
ресборкой (я думаю это появится как только майнтенеру понадобится
поотлаживать что-то в коде, а пока ненужно)
AC> Терминология используется не твоя, а авторов make. Dixi.
ну хорошо, рекурсивный
избежать легко учетом зависимостей
внешный make - компилятор
то что он собирает является депендсом для того что собирает данный мейк
что не так?
AC> Нет. Вон выше пример разжеван в деталях. Ровно такая ситуация, даже
AC> без либы2.
этот пример как раз пример недоделанного (до решения _и_ этой задачи)
make
доделка сводится к вводу нескольких зависимостей
AC> Повторяю. Специально писать надо makefile1, а не makefile3. Т.е. в
AC> данном случае правками в debian/rules это не лечится.
именно лечится
установкой (заменой) зависимости install-stamp на бинарники (в
простейшем случае видимо достаточно будет зависеть от одного из
бинарников, в идеальном случае - от всех)
AC> А на практике, естественно, этого никто делать и не пытается (особенно,
AC> если makefile1 сгенерирован, а не руками писан), а делают make -C dir.
и после make -C dir получают собранными те цели что собирает этот make.
в данном случае эти цели заменены на install-stamp
--
... mpd is off
. ''`. Dmitry E. Oboukhov
: :’ : email: [EMAIL PROTECTED] jabber://[EMAIL PROTECTED]
`. `~’ GPGKey: 1024D / F8E26537 2006-11-21
`- 1B23 D4F8 8EC0 D902 0555 E438 AB8C 00CF F8E2 6537
signature.asc
Description: Digital signature

