![GNU Make는 이미 존재하는 경우에만 매크로를 환경 변수로 내보냅니다.](https://linux55.com/image/190126/GNU%20Make%EB%8A%94%20%EC%9D%B4%EB%AF%B8%20%EC%A1%B4%EC%9E%AC%ED%95%98%EB%8A%94%20%EA%B2%BD%EC%9A%B0%EC%97%90%EB%A7%8C%20%EB%A7%A4%ED%81%AC%EB%A1%9C%EB%A5%BC%20%ED%99%98%EA%B2%BD%20%EB%B3%80%EC%88%98%EB%A1%9C%20%EB%82%B4%EB%B3%B4%EB%83%85%EB%8B%88%EB%8B%A4..png)
다음을 고려하세요 Makefile
:
X = macro-X-value
foo:
echo $$X $(X)
여기서 목적은 X
환경 변수와 매크로의 이름 역할을 하는 것입니다. 다음을 사용할 때 bmake
예상대로 작동합니다 .
$ env X=env-X-value /usr/bin/bmake
echo $X macro-X-value
env-X-value macro-X-value
$ env -i /usr/bin/bmake
echo $X macro-X-value
macro-X-value
그러나 GNU Make(v.4.2.1)를 사용하면 동작이 매우 이상해집니다.
$ env X=env-X-value /usr/bin/gmake
echo $X macro-X-value
macro-X-value macro-X-value
$ env -i /usr/bin/gmake
echo $X macro-X-value
macro-X-value
gmake
그래서 수출가치가 있는거 같네요매크로 X
~처럼
환경 변수 X
, 하지만오직외부 환경일 때이미
출구 X
.
이에 대한 정보를 찾을 수 없습니다.POSIX 설명. 사실 또 다른 요점이 있습니다.
매크로는 실행 중인 명령 환경으로 내보내지지 않습니다. […]
이 동작이 문서화되어 있나요? 이것은 버그입니까? 비활성화할 수 있나요?
답변1
내가 매뉴얼에서 읽은 바에 따르면, GNU make는 변수를 쉘처럼 취급합니다. 시작되면 환경의 변수를 내부 세트로 가져오고, 명령을 실행할 때 내보내기용으로 표시된 변수를 환경으로 내보냅니다. 이는 모든 변수가 포함된 테이블이 하나만 있고 동일한 이름의 환경 변수와 비환경 변수를 가질 수 없음을 의미합니다.
make의 변수는 make가 실행되는 환경에서 가져올 수 있습니다. make가 시작될 때 표시되는 모든 환경 변수는 동일한 이름과 값을 가진 make 변수로 변환됩니다.
명시적으로 요청하지 않는 한 make는 원래 환경에 정의되었거나 명령줄에 설정된 경우에만 변수를 내보냅니다. [...] 특정 변수를 하위 make로 내보내려면 다음과 같이 내보내기 지시문을 사용합니다.
export variable …
변수를 내보내지 않으려면 다음과 같이 unexport 지시어를 사용하세요.
unexport variable …
제가 테스트한 바에 따르면 unexport X
프로세스가 시작된 환경에서 내부 변수를 완전히 제거하는 것만으로는 내부 변수와 다른 값을 유지할 수 있는 방법이 없는 것 같습니다.
사용.POSIX
내장된 목표하지만 이 동작은 바뀌지 않는 것 같습니다.의견인 것 같습니다.어떤 경우에도 POSIX 동작에 대해 너무 엄격한 Make는 없습니다.