Makefile에 일부 환경 변수를 포함시키려고 합니다. env 파일은 다음과 같습니다.
FOO=bar
BAZ=quux
export
각 환경 변수는 부팅 가능하지 않습니다. Makefile에 프리앰블 export
과 env 파일을 추가하면 include
모든 것이 잘 작동합니다. 하지만 export
. 이렇게 하면 include envfile
Makefile에서만 사용할 수 없습니다 .
나는 또한 다음과 같은 것을 시도했습니다.
sed '/^#/!s/^/export /' envfile > $(BUILDDIR)/env
include $(BUILDDIR)/env
그러나 그렇게 하면 포함할 env 파일이 존재하지 않기 때문에 make에서 오류가 발생합니다.
답변1
나는 비슷한 문제가 있었고 이 스레드에 도착했습니다. 또 다른 가능한 해결책은 인수 없이 make 내보내기 명령을 실행하는 것입니다.
include .env
export
그러면 모든 make 변수가 환경 변수로 내보내집니다. 이 동작은 모든 사용 사례와 일치할 수도 있고 그렇지 않을 수도 있지만 나에게는 작동하며 쉘 스크립트 마법이 포함되지 않습니다.
답변2
gnu make를 사용하는 경우 이 envfile
파일을 포함시킨 다음 동일한 파일에서 얻은 변수 목록을 내보내야 합니다.
#!make
include envfile
export $(shell sed 's/=.*//' envfile)
test:
env
답변3
이전 답변을 완료하기 위해 meuh
env 파일을 동적으로 만들려면 설정 기능을 정의할 수 있습니다.
- 일부 콘텐츠가 포함된
env/local-dev.env
파일 만들기env/integ.env
- 로드하는 방법을 정의하세요.
setup_env 정의 $(평가 ENV_FILE := env/$(1).env) @echo "-설정 환경 $(ENV_FILE)" $(평가에는 env/$(1).env가 포함됩니다) $(평가 내보내기 sed 's/=.*//' env/$(1).env) 엔데브
그럼 그걸 사용해
localDevEnv: ##env/local-dev.env 환경 로드 $(setup_env,local-dev 호출) integEnv: ##env/integ.env 환경 로드 $(setup_env 호출, 정수)
답변4
기존 ENV 변수 유지
export $(shell [ ! -n "$(ENVFILE)" ] || cat $(ENVFILE) | grep -v \
--perl-regexp '^('$$(env | sed 's/=.*//'g | tr '\n' '|')')\=')
test:
echo $$FOO
달리기
make ENVFILE=envfile test # bar
export FOO=foo
make ENVFILE=envfile test # foo