Makefile 내에서 셸 명령을 즉시 확장하려고하지만 셸 명령에서 Makefile 내의 환경 변수에 액세스 할 수있게하려고합니다. $ (shell ...)을 사용하면 즉시 확장되지만 변수에 액세스 할 수는 없습니다. 역 인용 부호를 사용하면 확장이 즉시 이루어지지 않고 나중에 Makefile에서 문제가 발생합니다. 역 인용 부호를 즉시 확장하거나 현재 환경을 $ (쉘) 명령에 전달할 수있는 방법이 있는지 궁금합니다. 예를 들어Makefile 셸로 환경 변수 내보내기
, 다음 메이크 :
SOME_VAR := some_val
export SOME_VAR
VAR1 := `echo $$SOME_VAR`
export VAR1
VAR2 := `echo $$VAR1`
all:
@echo VAR1=$(VAR1)
@echo VAR2=$(VAR2)
윌 출력 : 나는 "VAR2 = some_val"인쇄 할
~/tmp/t2> make
VAR1=some_val
VAR2=`echo $SOME_VAR`
. 실제 예제는 좀 더 복잡합니다 (환경 변수는 상위 makefile에서 상속되며 perl 스크립트를 사용하여 변수를 편집하려고합니다). 원칙은 동일합니다.
도움을 주시면 감사하겠습니다.
흠 ... 그래, 내 예 결함이되었다. ..위의 예에서 VAR1은 Makefile 내에서 확장되지만, 필요한 것은 셸 스크립트 내에서 확장되는 VAR1입니다. 즉, ENV { 'VAR1'}에 액세스해야하는 펄 스크립트를 호출합니다. $ (shell ...)에서 호출하면 스크립트는 VAR1이 무엇인지 알 수 없습니다. 더 좋은 예를 들어 질문을 수정하겠습니다. 감사. – John
@ 존, 나는 당신이 여기서 무엇을하려고하는지 이해하지 못합니다. 몇 가지 추측을 할 수는 있지만 질문을 편집하는 것이 더 빠를 것이라고 생각합니다. – Beta
내가 실제로하려고하는 것은 : 나는 메이크 파일을 가지고 있는데,이 메이크 파일은 오브젝트 파일을 만들고 그것으로 빌드 된 구성 설정에 따라 이름을 짓는 것으로되어있다. 구성 설정을 이름으로 변환하는 펄 스크립트가 있습니다. 이 작업을 수행하려면 perl 스크립트가 구성 설정에 액세스 할 수 있어야합니다 (역 인용 부호를 사용해야합니다). 이것은 그 자체로는 괜찮지 만, 그 이름은 다른 펄 스크립트에서 사용되어야합니다. 두 번째 스크립트가 실행될 때 이름이 확장되지 않으므로 오류가 발생합니다. 해결 방법을 찾고 있는데요. – John