2011-01-14 4 views
2

GNU Make 3.80을 사용하고 있습니다. Makefile에서는 자동 변수 $ @를 사용하여 현재 타겟을 참조합니다.

@echo current target is ... [[email protected]] 
ifeq ([email protected],sms) 
    @echo yep, they are equal 
else 
    @echo no, they are not equal 
endif 

아래 출력과 같이 $ @는 sms로 확장됩니다.

출력은 다음과 같습니다

current target is ... [sms] 
no, they are not equal 

내 질문한다 : $ @는 (분명히) SMS로 확장하기 때문에,해야 아닌 "true"로 지점는 ifeq 조건 출력이 읽어야하는 결과로 (실행 네, 그들은 평등합니다)? [I 출력이 아니오 이유에 손실에서 오전, 그들은 동일하지.]

답변

4

GNU Make manual에서 : 당신이 인식하는 것이 매우 중요합니다

10.5.3 자동 변수 은 ... 변수 값을 사용할 수있는 제한된 범위 : 은 레시피 내에 값만 있습니다. ... GNU make의 특수 기능인 보조 확장 ( Secondary Expansion 참조)을 사용하면 자동 변수 값을 사전 요구 사항 목록에 으로 사용할 수 있습니다.

즉, [email protected]은 대상을 빌드하는 명령이 들어있는 섹션 내에서 사용할 수 있으며 일부 제한 사항은 필수 구성 요소 목록 내에서만 사용할 수 있습니다.

대상을 빌드하는 데 사용되는 명령 목록 내에서 조건을 구현하기 위해 쉘 명령을 사용할 수 있습니다 그러나

: 또한 당신이 목표 명령 행 사용에 지정된 내용을 확인하려면

@echo current target is ... [[email protected]] 
    if [[ "[email protected]" == "sms" ]]; then \ 
     echo yep, they are equal; \ 
    else \ 
     echo no, they are not equal; \ 
    fi 

변수를 MAKECMDGOALS.

+0

감사합니다. ssmir. – JaysonFix

+0

MAKECMDGOALS는 보호기입니다. 감사합니다! –

관련 문제