[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

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: