Makefile에는 env 파일이 포함되어 있습니다.

Makefile에는 env 파일이 포함되어 있습니다.

Makefile에 일부 환경 변수를 포함시키려고 합니다. env 파일은 다음과 같습니다.

FOO=bar
BAZ=quux

export각 환경 변수는 부팅 가능하지 않습니다. Makefile에 프리앰블 export과 env 파일을 추가하면 include모든 것이 잘 작동합니다. 하지만 export. 이렇게 하면 include envfileMakefile에서만 사용할 수 없습니다 .

나는 또한 다음과 같은 것을 시도했습니다.

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

이전 답변을 완료하기 위해 meuhenv 파일을 동적으로 만들려면 설정 기능을 정의할 수 있습니다.

  • 일부 콘텐츠가 포함된 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

관련 정보