make a funkce v impl. pravidle

Míla Kuchta mila.kuchta na atlas.cz
Středa Červen 27 03:15:43 CEST 2001


Míla Kuchta <mila.kuchta na atlas.cz> wrote:
> Pavel Kankovsky <peak na argo.troja.mff.cuni.cz> wrote:
>> 
>>> IMHO to neni pravda. Ja jsem na rozdil od Vas vytvoril implicitni
>>> pravidlo, ktere se s jistymi omezenimi (ano je celkem blby, ze se lisi
>>> target a vysledny soubor) da pouzit, zatimco Vy pouze PHONY target,
>>> ktery, jak uz jste poznamenal, je z hlediska make nepouzitelny. Zalezi
>>> na tom, jaky s tim mate zamer.
>> 
>> Aby bylo jasno: tim, ze se lisi target uvedeny v makefile a skutecny
>> vystupni soubor, jste sam vyrobil "phony target", nebot "phony target" je 
>> ex definitiones takovy target, ze k nemu prirazena sekvence prikazu
>> nevytvori ci neaktualizuje soubor s odpovidajicim jmenem.
> 
> To mate sice (ex definitiones) pravdu, faktem ale zustava, ze pokud
> nekde pouziji A.tex jako prerequisite, tak se tento cil vykona pouze v
> pripade, ze a.tex neexistuje respektive neni starsi nez soubor
> zdrojovy (alespon v GNU make). Uz tento samotny fakt (,ktery mimo jine
> znamena, ze takto vyrobeny target GNU make tak uplne za PHONY
> nepovazuje) mi staci k tomu, abych jej mohl dale pouzit a neprisel o
> hlavni vyhodu makeu oproti beznemu "build skriptu".

Velice se omlouvam vsem za sireni bludu a zvlaste pak Pavlovi za neopravnene
napadeni (viselo mi neco v Makefilu co nasvedcovalo menu chybnemu dojmu) a za
trest jsem sesmolil priklad, jak nepsat Makefile, ktery vsak resi puvodni
problem.:-(.

## Makefile ##
.PHONY = all clean

srcname = $(wildcard *.TXT)

%.tex : $(srcname)
        for i in $^; do if [ $$(basename `echo $$i|tr '[:upper:]' '[:lower:]'` .txt) = $(basename $@) ]; then cat $$i > $@; fi; done;
^^^
#na jednom radku 

all: a.tex c.tex d.tex
 
clean :
        rm -f *.tex
####

S pozdravem

Mila Kuchta


Další informace o konferenci Linux