GNU Make version 3.75

Autor: Jan Stożek (jasio_at_nowhere.pl)
Data: Fri 22 Oct 1999 - 14:55:39 MET DST


Witam,

        Mam problem z Make'iem i nie wiem, czy to on źle działa czy ja.

        Otóż w dokumentacji jest napisane (a przynajmniej ja to tak
zrozumiałem), że pliki pośrednie - tworzone automatycznie przez reguły
implikowane albo wymienione jako składniki pseudopliku .INTERMEDIATE -
nie są branę pod uwagę podczas sprawdzania, czy konieczne jest
odbudowanie targetu czy nie. Natomiast po odbudowaniu plików
docelowych, pliki pośrednie są automatycznie kasowane. Innymi słowy,
jeżeli mam Makefile:

-------------- MAKEFILE -------------
all: test.txt
%.txt : %.c
        copy $< $@
%.c : %.rtf
        copy $< $@
%.rtf : %.pcw
        copy $< $@
-------------- /MAKEFILE -------------

to make kolejno tworzy pliki test.rtf, test.c i test.txt, po czym
kasuje pliki test.rtf i test.c. Jak dotąd, to jest to dokładnie to, o
co chodzi - w katalogu mam test.txt i test.pcw, bez zbędnego śmiecia.
Przy kolejnym uruchomieniu make powinien sprawdzić, że test.txt jest
nowszy od test.pcw (w tym wypadku - ma tę samą datę, ale to nie wpływa
- touch nie zmienia sytuacji) i dać sobie z nim spokój. Niestety, tak
nie jest: make odbudowuje pliki pośrednie, co oczywiście wymusza
również odbudowanie pliku docelowego - oczywiście zbędne, bo plik ten
jest przecież aktualny. Co ciekawe, próba przerwania łańcucha odbudowy
(touch -r $< $@ w plikach pośrednich) też właściwie nie daje efektu.

        Proste machinacje z regułami (np. powiązanie eksplicite test.txt :
test.pcw) nie dały żadnego efektu.

        Kasowanie pośrednich plików jest dla mnie bardzo OK, tylko dlaczego
ta cholera na okrągło chce odbudowywać wszystko?

        Czy to jest problem tylko w wersji OS-owej, czy również występuje na
innych platformach? Czy da się z tym zrobić coś sensownego? Kiedyś
wykombinowałem rekurencyjnego makefile'a z blokowaniem części reguł w
ifdefach, ale to jest chore.

-- 
Pozdrawiam,
Jan.
PS. Mój adres: nowhere = Polbox. 


To archiwum zostało wygenerowane przez hypermail 2.1.7 : Tue 18 May 2004 - 15:24:05 MET DST