2011-12-22 3 views
2

가능한 중복 :
arithmetic in a Makefile메이크 : 업데이트 변수

난 아주 많이 Makefile을 사용하여 초보자입니다. 내가 좋아하는, 변수를 업데이 트하려는이 더 많거나 적은 : 즉

LEVEL=0 

train: 
    while (eval_score > previous_eval_score) 
    make iterate 

iterate: 
    do stuff 
    write files to /path/to/$(LEVEL)/asdf.txt 
    $(LEVEL)++ 

, 모든 반복/1// 0, 다음/경로에/처음으로/경로, 디렉토리에 어떤 파일을 작성 , 등등.

분명히 함수 내에서 변수를 업데이트하거나 재 할당 할 수 없습니다. 나는 잠시 동안 수색했지만 만족스러운 답을 찾을 수 없습니다. 어쩌면 나는 가지고 있지만 모든 것을 이해하지 못할 수도 있습니다. 나는 또한 bash에서 계산하는 것과 같은 것을 시도했지만 결국 변수를 업데이트해야합니다. 아마도 파일을 업데이트하고 모든 반복마다 파일에서 읽는 것과 같이 시도해야할까요?

감사합니다.

+0

당신이 왜 순수한 쉘 여기 충분하지 않을 설명해 주실 수 있습니까? 'while (eval_score> previous_eval_score); 물건을해라. 파일을 쓰십시오; done "은 더 쉽고 표현력이 좋아 보입니다. 그래서 당신은 make make에 대한 이유가 있다고 가정합니다. – thiton

+0

안녕하세요 thiton, 답장을 보내 주셔서 감사합니다. makefile은 또한 몇 가지 스크립트를 호출하는 몇 가지 다른 함수를 포함하고 있으며, 그 중 일부는 계층 적입니다. 내 생각에이 함수는 아주 잘 만듭니다. 또한 더 우아하고 관리하기 쉽기 때문에 make를 선호합니다. 그러나 쉘 스크립트를 사용할 수도 있습니다. 해결하려는 주요 문제는 반복이 완료 될 때마다 $ (LEVEL) 변수에 1을 더하는 문제입니다. 중요한 변경을하지 않아도 될지 궁금합니다. 감사합니다, 기디온 – Gideon

답변

0

Makefile의 가장 큰 문제점은 각 make iterate이 환경 변수를 업데이트 할 수있는 하위 make를 생성하지만 상위 make에는 영향을 미치지 않으므로 다음 반복에 영향을 미치지 않는다는 것입니다. 또한 규칙 내에서 변수를 업데이트 할 수는 없지만 이는 두 번째 문제입니다. 당신은 당신이 제안처럼 반복 make을하고 쉘을 통해 수준 증가 할 수

:

train: 
    LEVEL=0; while need_more_iterations; do \ 
     $(MAKE) LEVEL=$$LEVEL iterate; \ 
     LEVEL=`echo $$LEVEL + 1 | bc`; \ 
    done 
+0

답장을 보내 주셔서 대단히 감사합니다, 나는 그것을 구현하려고합니다. 최고, 기디언 – Gideon