Podczas korzystania z opcji Utwórz ostatnio zaobserwowałem pewne dziwne zachowanie (v3.81).Czy mogę nakazać Make, aby ignorował zmienne środowiskowe?
Załóżmy, że mam następujący Makefile:
FOOBAR = $(shell find nonexistentdirectory -iname "foobar" | tr '\n' ' ')
all:
@echo "Hi"
clean:
@echo "Hi again"
wydaje się proste wystarczy, prawda? Warto zauważyć, że FOOBAR
jest "zmienną rekurencyjnie rozwiniętą", więc nie powinno się jej oceniać, dopóki się do niej nie odwołam. Zauważ, że nigdy o tym nie mówię. Należy również pamiętać, że nonexistentdirectory
nie istnieje, jak można się spodziewać.
Załóżmy teraz ustawić FOOBAR
w powłoce przed modlę cel Producent:
compy386$ FOOBAR="stuff" make clean
find: nonexistentdirectory: No such file or directory
Hi again
Dlaczego FOOBAR
są oceniane? Oczywiście ma to coś wspólnego z tym, że zmienna jest zdefiniowana w powłoce. Czy mam przewidzieć, że użytkownik mógł ustawić zmienne w powłoce? Co ja tu robię źle ?!