pre fanusikov make

Pavel Troller patrol na sinus.cz
Čtvrtek Květen 9 18:41:38 CEST 2013


Zdravím,
  tak jsem odpověděl chybně. Došlo u mne k chybě v experimentu, a
to následovně:

<vytvořen přesný originál makefile>

patrol na gonio:~/mt$ make
make: *** No rule to make target `s.bin', needed by `bin'.  Stop.
(chová se stejně jako wekovi)

patrol na gonio:~/mt$ make s.bin
Making s.bin
(chová se opět stejně jako wekovi)

<dále jsem přidal mezery do  definice TARGET>

patrol na gonio:~/mt$ make
get   s.bin
make: get: Command not found
make: *** [bin] Error 127

Toto chování mne nepřekvapilo; o implicitních pravidlech vím a samozřejmě
příkaz get nemám běžně definován, takže toto chování jsem považoval za to,
že "se chová, jak má" a odpověděl jsem v mailu.

Jenže ona ta změna chování nebyla způsobena přidáním mezer do definice
TARGET, ale tím, že se druhým pokusem o spuštění a`la wek vyrvořil s.bin:

patrol na gonio:~/mt$ l
total 8
-rw-r--r-- 1 patrol users 85 May  9 18:32 Makefile
-rw-r--r-- 1 patrol users  6 May  9 18:34 s.bin
patrol na gonio:~/mt$ rm s.bin
patrol na gonio:~/mt$ make
make: *** No rule to make target `s.bin', needed by `bin'.  Stop.

čili po odstranění s.bin se již make chová jako před tím, bez ohledu na
mezery v definici.

Takže tímto odpovídám kolegovi wekovi - ne, moje make je zrovnatak plné
implcitních pravidel jako vaše, ačkoliv na Linuxu :-). A omlouvám se, že
jsem se nechal takto napálit - přeci jen, dělal jsem to v pracovní době
a řešil jsem současně řadu dalších úloh, nemělo to dostatečnou prioritu :-).


Zdraví Pavel


> Zdravím,
>   osobně bych dal mezery do definice TARGET:
>   TARGET = s
>   Když jsem to zkusil u sebe (Linux), make dělalo, co se od něj očekávalo.
>     Pavel
> 
> > Co je zle na tomto makefile? Tabulatory su tam, kde treba. Preco nestaci
> > napisat "make", a musim napisat "make s.bin" aby mi to vyrobilo ten s.bin?
> > Ak do TARGET dam nieco ine, napr. "TARGET=t", tak "make" vytvori bez reci
> > t.bin.
> > 
> > (Podotykam, ze som to sam nedokazal vyriesit, musel mi napovedat kolega).
> > 
> > wek
> > 
> > 
> > 
> > -----
> > 
> > TARGET=s
> > 
> > all: bin
> > 
> > bin: $(TARGET).bin
> > 
> > %.bin : 
> > 	@echo "Making $@"
> > 	@echo $@ > $@
> > 
> > -----
> > 
> > c:\wek\SMO\tmp\tmp>make --version
> > GNU Make 3.81
> > Copyright (C) 2006  Free Software Foundation, Inc.
> > This is free software; see the source for copying conditions.
> > There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
> > PARTICULAR PURPOSE.
> > 
> > This program built for i386-pc-mingw32
> > 
> > c:\wek\SMO\tmp\tmp>cat makefile
> > TARGET=s
> > 
> > all: bin
> > 
> > bin: $(TARGET).bin
> > 
> > %.bin :
> >         @echo "Making $@"
> >         @echo $@ > $@
> > 
> > 
> > c:\wek\SMO\tmp\tmp>make
> > make: *** No rule to make target `s.bin', needed by `bin'.  Stop.
> > 
> > c:\wek\SMO\tmp\tmp>make s.bin
> > Making s.bin
> > 
> > c:\wek\SMO\tmp\tmp>
> > 
> > 
> > _______________________________________________
> > HW-list mailing list  -  sponsored by www.HW.cz
> > Hw-list na list.hw.cz
> > http://list.hw.cz/mailman/listinfo/hw-list
> _______________________________________________
> HW-list mailing list  -  sponsored by www.HW.cz
> Hw-list na list.hw.cz
> http://list.hw.cz/mailman/listinfo/hw-list


Další informace o konferenci Hw-list