Эпиграф:
в грузинской школе:
- Гоги 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