BSD make
На сколько я понял - между main и subdirs никаких зависимостей нет, поэтому, теоретически, они могут собираться в любом порядке.
вместо "all: this subdirs" написать следующее
all:
$(MAKE) this
$(MAKE) subdirs
Немного кривовато, зато работает.
Но все вопросы остались.
---
...Я работаю антинаучным аферистом...
Только как быть? Ведь цели-то нематериальны.
Разве что выписать явную цепочку "all: subdirs", "subdirs: this".
---
...Я работаю антинаучным аферистом...
А зачем их именно в такой последовательности надо запускать?
Чтобы не путаться, это thttpd-2.25b.
---
...Я работаю антинаучным аферистом...
-subdirs:
+subdirs: this
---
...Я работаю антинаучным аферистом...
Разве что выписать явную цепочку "all: subdirs", "subdirs: this".Хватит просто "subdirs: this". IMHO, вполне корректный вариант.
Просто в одном из $(SUBDIRS) требуется то, что собирается в this.Ну тогда, похоже, что надо зависимость добавлять.
Так по идее и нагляднее будет для потомков, которые будут в этом копаться.
Просто в одном из $(SUBDIRS) требуется то, что собирается в this.Чётко записал её же на языке make:
subdirs: this
Что тут неясного?
редко бывает, когда КОНТРА лажает
Как хак, это сойдёт. По-хорошему же, надо трясти разработчика,
чтобы он прописал зависимости правильно.
_Материальные_ зависимости.
На самом деле, основной вопрос другой:
что такого поменялось в make от netbsd-3 до netbsd-4,
что перестали собираться некоторые пакеты?
Но с этим вопросом мы уже сами как-нибудь разберёмся.
---
...Я работаю антинаучным аферистом...
что такого поменялось в make от netbsd-3 до netbsd-4Поменялась неопределённость.
Раньше 0/0 возвращало 1, а сейчас стало возвращать 2.
Контра никогда не признает своей неправоты.
Цели нематериальны.покажи где в спецификации make написано что цели должны быть материальны?
Как хак, это сойдёт.
с какого перепуга это хак, если это прямое следование спецификации?
Контра никогда не признает своей неправоты.это еще печальнее
рейтинг то падает
По поводу 0/0 и make.
Есть довольно общие алгоритмы, которые устойчивы к делению на нуль,
если не заниматься искусственным выполнением "unspecified",
вставляя туда случайные числа, результат деления предсказуем.
А ещё можно не писать "unspecified", а заявлять
или подразумевать, что деление работает "см. алгоритм."
То же самое и с make: у него была одна семантика, стала другая,
это в условиях _отсутствия_ формальной спецификации, а не чего-то там.
В итоге то, что раньше собиралось без вопросов, сейчас перестало.
---
...Я работаю...
Кто же виноват в такой ситуации? Мне почему-то кажется, что всё-таки тот идиот, а не разработчики функции.
> поведением какой-то функции.
Этот идиот не из NetBSD и, следовательно, неподотчётен.
Если большинство реализаций make работают с его кодом,
значит, он может думать как ему удобно. Тем более, что
у него перед глазами есть прекрасный пример проекта GNU,
который кладёт на все стандарты.
Вот только есть беда: идиот идиотом, а работать с его кодом приходится.
---
...Я работаю антинаучным аферистом...
Этот идиот не из NetBSD и, следовательно, неподотчётен.Его проблемы.
Если большинство реализаций make работают с его кодом,Его проблемы. Нормальные люди делают так, как сказано в документации, а не так - "пошаманили, вроде работает, почему - хз, но работает, так что пусть так и остаётся".
значит, он может думать как ему удобно
а работать с его кодом приходитсяА кто виноват в кривизне кода? Правильно - идиот.
не быстрей, не производительней, а именно удобней
и они вполне могли в чейнджлоге об этом упомянуть
это я просто привожу пример, что поведение деления на ноль вполне может измениться
деление на ноль бывает задокументированным
а вот другой пример: закладывание на то что sizeof(int) = 4
ты закладываешься, переходишь на 64-бит процессор и обламываешься
и кто после этого идиот? ты или кто писал спецификацию?
А кто виноват в кривизне кода? Правильно - идиот.
Начиная с некоторого момента становится важным не кто виноват, а как это исправить.
а как это исправитьтебе же сказали как
что опять не так?
upd: сорри, показалось что это контра отвечал
например, могло измениться вот что: разрабы make решили, что удобнее сначала вызывать таски с меньшим количеством зависимостей, а уже потом с большимТак оно и было наверное. Как следствие Makefiles с недостаточно точно прописанными зависимостями перестали работать.
Жалобы Контры совершенно неуместны. Это примерно, как если бы он написал бы глючный алгоритм сортировки, который работал бы на 90% входных данных. А потом в один прекрасный день появились бы входные данные, на которых его алгоритм не работает. И данные были бы виноваты в этом.
Тебе .
---
...Я работаю...
жди ответ пенартурА
Еще можно перейти на ant - там в случае неопределенности порядка предпочитается порядок следования целей в списке зависимостей.
Хочешь перейти на ant? Убеди в этом разработчиков thttpd.
---
"Аллах не ведёт людей неверных."
Виновата параллельность, всё происходит из-за defined(MAKE_JOBS
MAKE_JOBS определена в /etc/mk.conf
Соображения пока неизвестны.
> 2. "Что делать?" ...Чтобы main собиралась раньше subdirs?
> Желательно --- наименьшим вмешательством.
Убрать MAKE_JOBS=... из /etc/mk.conf или завернуть
в ".ifndef BSD_PKG_MK", как, собственно, и советуют официальные
источники: "Parallel package builds are not supported."
---
"This user is BSD-compliant."
Оставить комментарий
Ivan8209
Вопрос на засыпку.Есть примерно такая конструкция (из реального кода):
У меня получается, что subdirs всегда начинает собираться раньше
main, в каком бы порядке ни стояли цели в строке 2.
Вопросы.
1. "Кто виноват?" Кто-нибудь знает соображения, почему так?
2. "Что делать?" ...Чтобы main собиралась раньше subdirs?
Желательно --- наименьшим вмешательством.
3. "Быть или не быть?" Может, это вовсе баг?
---
"This user is BSD-compliant."