makefile에서 쉘 환경 변수를 얻는 방법은 무엇입니까?


102

내가 들어갈 때 쉘에서

echo $demoPath

그것은 인쇄

/usr/local/demo

$demoPath메이크 파일 에서이 변수의 값을 어떻게 얻을 수 있습니까?

답변:


152

환경 변수를 내 보낸 경우 :

export demoPath=/usr/local/demo

makefile( make설정 한 모든 환경 변수를 가져옴) 에서 이름으로 간단히 참조 할 수 있습니다 .

DEMOPATH = ${demoPath}    # Or $(demoPath) if you prefer.

환경 변수를 내 보내지 않은 경우 내보낼 때까지 또는 명령 줄에서 명시 적으로 전달하지 않는 한 액세스 할 수 없습니다.

make DEMOPATH="${demoPath}" …

C 쉘 파생물을 사용하는 setenv demoPath /usr/local/demo경우 export명령을 대체 하십시오 .


3
"make는 설정 한 모든 환경 변수를 가져옵니다". 작동합니다! 좋네요 ~, 전에는 몰랐어요, 정말 고마워요.
— Jialin 2015 년

@jonathan_leffler 나는 당신의 대답에서 영감을 얻었고 조금 다른 일을했습니다. 내보내기하지 않고 make를 호출하기 전에 envvar를 설정했습니다 demoPath=/usr/local/demo make. 테스트하고 답변을 업데이트 할 수 있습니다. 건배!
— AD

@AD 예, 특정 명령에 대한 환경 변수 값을 설정하는 또 다른 메커니즘입니다. 즉석에서 변수를 만드는 방법보다는 기존 변수의 값에 액세스하는 방법을 묻는 질문에 약간 접선입니다. 때때로 유용한 기술이되는 것을 멈추지 않습니다.
— Jonathan Leffler

10

행동을 확인하기 위해 공식 문서를 원하는 사람들을 위해

make의 변수는 make가 실행되는 환경에서 올 수 있습니다. make가 시작할 때 보는 모든 환경 변수는 동일한 이름과 값을 가진 make 변수로 변환됩니다. 그러나 makefile의 명시 적 할당 또는 명령 인수가 환경을 재정의합니다. ( '-e'플래그가 지정되면 환경의 값이 메이크 파일의 할당을 재정의합니다.

https://www.gnu.org/software/make/manual/html_node/Environment.html


6
all:
    echo ${PATH}

또는 하나의 명령에 대해서만 PATH를 변경하십시오.

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