Re: make contest
Stanislav Maslovski -> debian-russian@lists.debian.org @ Thu, 2 Oct 2008 09:32:01 +0400:
>> ДАННАЯ задача может решаться так:
>>
>> A/Makefile:
>>
>> all: ../a.tgz
>>
>> ../a.tgz: $(DIR_SRC)/c $(DIR_SRC)/b
>> make -C ../B
>> tar -czvf $@ $^
>>
>> и ничего страшного что make -C ../B вызывается постоянно, поскольку он
>> ничего не делает.
SM> DIR_SRC="../B", вероятно?
SM> Не будет работать. Если сделать гипотетический make clean в B/ (rm
SM> -f b c) то вызов make all в A/ приведет совсем не к тому, что
SM> ожидалось. Так как явных правил сборки с.c -> с и b.c -> b в
SM> A/Makefile нет, гнутый make попытается применить неявное правило (а
SM> другие, наверно, просто с ошибкой "No rule to make target"
SM> выпадут). Что в общем случае приведет к неуспеху.
Он же специально лог привел. И правило выбрал явно недефолтное.
Работает. И даже, в общем, понятно, почему, хотя место действительно
нетривиальное.
Не будет работать, если b.c - не исходник, а промежуточный результат.
Т.е. если дополнить задание утверждением "b.c генерируется из b.y", то
да, отвалится.
Но как лечить, тоже понятно. include.mk кладется в B, и правила сборки
собственно файлов пишутся в него. С учетом DIR_SRC.
--
Artem Chuprina
RFC2822: <ran{}ran.pp.ru> Jabber: ran@jabber.ran.pp.ru
Пришел в гости математик, почитать новую рукопись. Вычитал из нее трех
героев напрочь, и ушел.
Gimli on #arda
Reply to: