2011-11-21 5 views
1

주어진 GNU Make 3.81.목표 내에서 make 변수를 설정하십시오.

아래

메이크
all: 
     echo before 
TEST=1 
     echo after 

수율 "제 목표 전 명령 개시된다. 정지합니다." "TEST = 1"라인에. 다른 측면에서

다음과 같은 TEST에 "무시"를 추가 : (모두와 "인쇄"있다 "후"이전)

all: 
     echo before 
override TEST=1 
     echo after 

실행 잘.

질문 :

  1. "재정의 TEST = 1"확인하는 동안 "TEST = 1", ok가 왜?

  2. 대상의 명령 내에서 "override TEST = 1"이 좋은 이유는 무엇입니까? 만들 GNU 완벽하게 유효한 ...

    override: TEST=1 
    

    : Proba

+0

[조건부로 Makefile 대상 내부 변수에 추가] (http://stackoverflow.com/q/2148892/2509)와 유사합니다. – dmckee

+0

@dmckee TEST 변수는 규칙의 전제 조건 부분에 정의 된 대상 특정 변수입니다. TEST 변수는 규칙의 명령 부분 어딘가에 있습니다. – dimba

+0

내 의견에 "중복"이 표시되지 않는 이유가 있습니다. – dmckee

답변

1

내 생각 엔

override TEST=1 

는 것으로 해석됩니다 있다는 것입니다.

당신은 단순히 당신이 이와 같은 메이크 파일의 전역 섹션에서하는 것처럼 변수를 설정 한 후 대상을 명명에 의해 대상별 변수를 수정할 수 있습니다

:

<target>: <variable>:=<value> 
<target>: <variable>=<value> 
<target>: <variable>+=<value> 

이 방법은 커먼입니다 ...에 뭔가를 추가하거나 하나의 오브젝트 파일에 대한 CFLAGS을 수정 배치

참고 : 당신이하려고했던 것처럼그러나, 그것은 대상의 명령 블록 내에서 변수 할당을 만드는 잘못된 구문입니다 .

+0

'target : A : = 1'은 확실히 작동하지 않습니다 ('/ bin/sh : 1 : A : = : not found') 그리고'target A = 1'은'A'를 사용할 때 비어있게 만듭니다. '$ (A)'. –

+0

@KarlRichter :'target : A : = 1'은 GNU make와 관련이 있습니다. 나는'/ bin/sh'이 어떻게 또는 왜 참여하게 될지에 대한 생각이 없다. 결국 이것은 조리법 안쪽에 * 아닙니다 *입니다. 그리고 변수 타겟을 하나의 타겟 (파일이나 가짜 타겟이 될 수 있음)으로 제한하고자하기 때문에'target A = 1'은'target '뒤에 콜론 (':')이 필요합니다. 그리고 네, 이것은 확실히 작동합니다. 당신은 실제로 내 대답의 끝에 * NOTE *를 읽었습니까?! 귀하의 의견은 강력하게 당신이 질문의 OP와 같은 착각에 빠져 나가는 것을 제안하기 때문에. – 0xC0000022L

관련 문제