Próbuję dołączyć niektóre zmienne env do pliku Makefile. Plik env wygląda następująco:
FOO=bar
BAZ=quux
Zauważ, że nie ma prowadzącej export
do każdej zmiennej env. Jeśli dodam wiodący export
i tylko include
plik env w Makefile, wszystko działa tak, jak powinno. Ale muszę nadal przewodzić env vars sans export
. To uniemożliwia mi używanie include envfile
w Makefile.
Próbowałem też zrobić coś takiego:
sed '/^#/!s/^/export /' envfile > $(BUILDDIR)/env
include $(BUILDDIR)/env
Ale zrobienie tego powoduje, że make zgłasza błąd, ponieważ nie ma pliku env do włączenia.
environment-variables
make
Michael Irwin
źródło
źródło
Odpowiedzi:
Jeśli używasz gnu make, powinno działać to załączyć
envfile
plik, a następnie wyeksportować listę vars otrzymanych z tego samego pliku:źródło
export $(shell...
linii. Potrzebuję tylkoinclude
linii.Miałem podobny problem i wylądowałem na tym wątku. Innym możliwym rozwiązaniem jest wykonanie polecenia make export bez żadnych argumentów:
Spowoduje to wyeksportowanie wszystkich zmiennych make jako zmiennych środowiskowych. To zachowanie może, ale nie musi pasować do wszystkich przypadków użycia, ale zadziałało dla mnie i nie wiązało się z żadnym magicznym skryptem powłoki.
źródło
Zachowuje istniejące wcześniej zmienne ENV
Biegać
źródło
Oto eleganckie rozwiązanie, które nie importuje Make vars, ale ustawia eksport środowiska dla podprocesów powłoki. Osobiście wolę zachować dynamiczne skrypty moich profili.
Jest trochę gotchas. Niestety ENV nie działa, myślę, że powinno (ale to jest problem z Bash, a nie Make). Naprawdę wymaga również innej linii, ponieważ domyślnym interpretatorem powłoki Make jest / bin / sh.
Z drugiej strony pozwala to również na włączenie funkcji powłoki w skryptach Makefile, ale tylko dla skryptów receptur. Nie wiem, jak wypadają inne pociski oprócz Bash. I dzieje się trochę więcej. Podałem trochę pliku testowego jako GIST .
Można sobie wyobrazić wiele skomplikowanych skryptów powłoki. Najbardziej podoba mi się to pytanie / odpowiedź dla prostych odpowiedzi.
źródło
jeśli twoja nazwa pliku to
.makerc
, możesz dołączyć ją do Makefile tak prosto:Wolę wcześniej dodać
-
znakinclude
, aby ukryć wszelkie ostrzeżenia.źródło