Makefile은 env 파일을 포함


26

env vars를 Makefile에 포함하려고합니다. env 파일은 다음과 같습니다.

FOO=bar
BAZ=quux

export각 환경 변수로 이어지는 것은 없습니다 . Makefile에 선행 exportincludeenv 파일을 추가하면 모든 것이 정상적으로 작동합니다. 그러나 나는 env vars sans를 계속 유지해야합니다 export. 그것은 include envfileMakefile에서 사용하지 못하게합니다 .

나는 또한 이와 같은 일을 시도했다.

sed '/^#/!s/^/export /' envfile > $(BUILDDIR)/env
include $(BUILDDIR)/env

그러나 env 파일이 없기 때문에 그 원인으로 오류가 발생합니다.


1
유닉스 및 리눅스에 오신 것을 환영합니다. 질문을 명확하게 적어주십시오. 정확히 달성하려는 것은 무엇입니까?
darnir

1
환경 변수 쌍이 포함 된 파일을 Makefile에 포함시켜 make가 실행중인 환경에서 사용할 수 있도록하려고합니다.
Michael Irwin

답변:


40

gnu make를 사용하는 경우 envfile파일 을 포함시킨 다음 동일한 파일에서 가져온 vars 목록을 내보내는 것이 좋습니다 .

#!make
include envfile
export $(shell sed 's/=.*//' envfile)

test:
        env

7
이 답변에 감사드립니다. 내 버전조차도 export $(shell...선 없이 작동 합니다. 난 그냥 include라인이 필요합니다 .
DuffJ

32

비슷한 문제가 있었고이 스레드에 착륙했습니다. 또 다른 가능한 해결책은 인수없이 make export 명령을 수행하는 것입니다.

include .env
export

모든 make 변수를 환경 변수로 내 보냅니다. 이 동작은 모든 사용 사례와 일치 할 수도 있고 일치하지 않을 수도 있지만, 저에게 효과적이며 쉘 스크립팅 마법사를 포함하지 않았습니다.


3

기존 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

3

다음은 Make vars를 가져 오지 않지만 셸 하위 프로세스에 대한 환경 내보내기를 설정하는 우아한 솔루션입니다. 개인적으로 저는 프로필을 동적 스크립트로 유지하는 것을 선호합니다.

export BASH_ENV=tools/sh/env.sh

몇 가지 문제가 있습니다. 불행히도 ENV가 작동하지 않는다고 생각합니다.하지만 Bash에는 문제가 있지만 Make는 아닙니다. 또한 Make의 기본 쉘 인터프리터는 / bin / sh이므로 다른 행이 필요합니다.

BASH_ENV := tools/sh/env.sh
SHELL := /usr/bin/bash

거꾸로 이것은 Makefile 스크립트에 쉘 함수를 포함시킬 수 있지만 레시피 스크립트에만 해당됩니다. 나는 Bash 운임 외에 다른 껍질이 어떻게되는지 모른다. 그리고 조금 더 진행되고 있습니다. 테스트 파일을 GIST로 넣었습니다 .

상상할 수있는 복잡한 쉘 스크립트가 많이 있습니다. 간단한 답변에이 Q / A가 가장 좋습니다.


2

파일 이름이 .makerc다음과 같이 Makefile에 포함시킬 수 있습니다.

include .makerc

경고를 표시하지 않으려면 -전에 부호 를 추가하는 것을 선호합니다 include.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.