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.