2013-10-13 2 views
0

저는 변수 세트를 평가하는 tcl 코드를 가지고 있습니다. 이 변수의 값은 변수 할당을하는 일련의 포함됩니다 파일 밖으로 조리법dereference는 변수를 인라인으로 만듭니다.

enter code here 

MY_ENV_VAR?=45 
foo:ARG1?=test 
foo:OUTFILE:=./testFile 
foo: 
$(shell ./evalVars.tcl -arg1 $(ARG1) -outFile $(OUTFILE)) 
$(foreach var,$(shell cat $(OUTFILE)),$(eval $(var))) 
runcmd -value $(myvar) 

에 다음 행 인수로 전달해야 "myVar에를 = 400"
쉘 기능 하나를 사용하여에 명령 행/make 변수는 환경 변수로서 tcl 쉘에 전달되지 않습니다.
tcl 쉘에서 env (MY_ENV_VAR)를 참조 해제하면 존재하지 않습니다. 쉘 명령을 사용하지 않으면 out 파일이 작성되기 전에 foreach/eval 행이 실행되지만 변수는 tcl 쉘에 표시됩니다.
나는 이것을하기위한보다 우아한 방법이있을 것이라고 확신합니다.

답변

0

와우, 그건 꽤 이상합니다.

하나의 대답은 하위 변수로 전달하려는 경우 make 변수를 내 보내야한다는 것입니다. 따라서 $(eval export $(var))과 같은 것이 필요합니다.

그러나 make가 규칙의 시작 부분에서 하위 프로세스에 대한 환경을 구축 할 수 있었기 때문에 작동하지 않을 수 있으며 각 개별 래서 피 라인에 대해 다시 계산할 수 없습니다. 나는 잘 모르겠다.

일반적으로 이것은 매우 기괴한 방법입니다.하지만 좀 더 정상적인 대안을 제안하기 전에 수정할 수있는 인프라의 양을 이해해야합니다. evalVars.tcl 파일을 변경하여 다른 유형의 출력을 생성 할 수 있습니까? OUTFILE은 타겟 관련 변수 여야합니까 (대상마다 다를 수 있음)? 아니면 메이크 파일 하나만 있습니까? evalVars.tcl을 동일한 레서피에서 실행해야합니까, 아니면 두 개의 다른 타겟이 될 수 있습니까?

훨씬 더 합리적인 접근법은 evalVars.tcl을 수정하여 변수 할당을하지 않고 쉘 변수 할당을 생성합니다. $(OUTFILE)의 내용이 응답 export myvar=400

+0

덕분에 같은 줄 것

foo: ./evalVars.tcl -arg1 $(ARG1) -outFile $(OUTFILE) \ && . $(OUTFILE) \ && runcmd -value $$myvar 

: 방금 뭔가를 할 수 있다고 한 경우. 많이 추측 :-). 나는 환경 변수 접근 방식을 시도했지만 .oneshell을 사용하지만 나는 어떤 문제에 부딪쳤다 고 생각해 냈다. 나는 env와 결합 된 &&를 사용할 수 있습니다. 별도의 레시피에서 evalvars를 가질 수 있지만 호출하는 각 대상은 특정 인수를 전달하고 설정된 변수를 사용해야합니다. 필요한 경우 evalvars의 출력을 수정할 수 있습니다. –

+0

값이 특수 문자를 갖는 변수를 실행할 때까지 잘 작동하는 대안을 시도했습니다. 나는 이것들을 ''탈출구와 함께 그룹화 해 보았습니다. 예를 들어 setenv a 'b [c = 1]' –

+0

죄송합니다. 문제를 이해하지 못했습니다. 문제가있는 특수 값/변수 지정 유형의 예를 제공해주십시오. – MadScientist

관련 문제