(fwd) gmake: feature or bug ?

Andrey Gerzhov (kittle@freeland.kiev.ua)
Fri, 26 Nov 1999 13:24:49 +0200 (EET)

-- forwarded message --
Path: freeland.kiev.ua!routki.ki.yurteh.net!carrier.kiev.ua!srcc!newsfeed.gamma.ru!Gamma.RU!ddt.demos.su!f400.n5020!f1003.n5080!not-for-mail
Newsgroups: fido7.ru.unix
Distribution: fido7
X-Comment-To: All
Approved: gateway@fido7.ru
From: Vitaly Pinjagin <Vitaly.Pinjagin@p2.f1003.n5080.z2.fidonet.org>
Date: Mon, 22 Nov 99 15:48:00 +0300
Subject: gmake: feature or bug ?
Message-ID: <3262151822@diger.utc.telenet.ru>
Organization: Controling/UTC
X-FTN-AREA: RU.UNIX
X-FTN-MSGID: diger.utc.telenet.ru c2707c8e
X-FTN-REPLYADDR: vit@utc.telenet.ru
X-FTN-REPLYTO: 2:5080/1003.2@fidonet
X-FTN-Tearline: ifmail v.2.14dev3
X-FTN-Origin: Controling/UTC (2:5080/1003.2@fidonet)
X-FTN-SEEN-BY: 5020/400 5080/1003
X-FTN-PATH: 5080/1003
X-FTN-PATH: 5020/400
Lines: 87
Xref: freeland.kiev.ua fido7.ru.unix:13361

Эпиграф:
в грузинской школе:
- Гоги gmake - это птиц или рыб ?

Предупреждение:
письмо длинное

Hе подскажет ли многоуважаемый All, что будет с файлом f.o,
после выполнения
touch f.c; rm -f *.[ob]; gmake -f Makefile-1 all
--------- Makefile-1 ------------
all: f.b
all2: f.b f.o
%.o: %.c
cp $< $@
%.b: %.o
cp $< $@
-------- end Makefile-1 ----------

а если закоментарить строку "all2: f.b f.o" ?

если *внезапное* появление 'rm f.o' вас не озадачило - то укажите мне то
место в прсловутом RTFM-е которое погло бы энто пояснить.

у меня это выглядит так:
---- до ------
cp f.c f.o
cp f.o f.b
----- после ------
cp f.c f.o
cp f.o f.b
rm f.o

для особо пытливых и любознательных предлагаю слегка усложненный
и более интересный вариант Makefile-2:

touch f1.c f2.c
rm -fr lib; gmake -f Makefile-2 all
rm -fr lib; gmake -f Makefile-2 all2
------------ Makefile-2 --------------------
src := f1.c f2.c
dir := lib
obj := $(dir)/f1.o $(dir)/f2.o
bin := $(dir)/f1.b $(dir)/f2.b
aout := $(dir)/f1.a $(dir)/f2.a

all: lib $(aout)
all2: lib $(aout) $(obj) $(bin)
$(dir):
mkdir $(dir)
$(dir)/%.o: %.c
cp $< $@
$(dir)/%.b: $(dir)/%.o
cp $< $@
$(dir)/%.a: $(dir)/%.b
cp $< $@
#.SECONDARY: $(obj) $(bin)
-------- end of Makefile-2 ------------------

домашнее задание:
1. оставить в живых f[12].[ob] файлы не прибегая
к раскоментариванию последней строки
2. в чем гребанное отличие Makefile-1 от Makefile-2 ?

размышления:
фича по поводу уничтожения промежуточных целей несомненно
имеет право быть, но почему это надо делать с такой садисткой
жестокостью.

( автор ненавязчиво подводит читателя к той мысли что в одном
случае упоминание "промежуточного" файла(ов) f.o , f[12].[ob] в
зависимостях цели 'all2' спасает его(их) от карающей руки , а в другом
даже Брюс Виллис не может помешать их смерти ?)

реквизит:
gmake -v
GNU Make version 3.77, by Richard Stallman and Roland McGrath.

RH-6.0, fbsd-3.2

BR, Vit.

PS
а почему этого Столлмена никто не поймает ?

-- end of forwarded message --

-- 
С тем, что не помешает никогда,
                                               Kittle