2011-04-19 3 views
7

내 규칙 패턴에 ifeq를 사용하려고하는데 문제가 있습니다. 내가 들여 쓰기를 사용하지 않는 경우, 그때 얻을Makefile ifeq 문제

"/bin/sh: -c: line 0: syntax error near unexpected token `mcc.exe,mcc.exe' 
/bin/sh: -c: line 0: `ifeq(mcc.exe,mcc.exe)'" 

을 :하지만 나는이 프로그램을 실행할 때

$(OBJS): $(OBJDIR)/%.o : ../%.c 
    @mkdir -p $(dir [email protected]) 
    ifeq(mcc.exe,$(CC)) 
     o_file:=$(shell echo [email protected] | sed -e 's/\/cygdrive\///' | sed -e 's/\([a-zA-Z]\)/\1:/') 
     $(CC) $(CFLAGS) $< -o $(o_file) 
    else 
     $(CC) $(CFLAGS) $< -o [email protected] 
    endif 

, 내가 얻을 : 이것은 내가에 문제가하고있는 규칙이다 "메이크 : 77 : * 분리 기호가 없습니다. 중지 "

Cygwin에서 GNU make 3.81을 사용하고 있습니다. ifeq에 대한 전체적인 문제는 두 개의 툴체인에 대해 동일한 Makefile이 있고 그 중 하나 (mcc.exe)가 /cygdrive/c/.../ something paths에 대처할 수 없지만 대신 c : /.../ something path. 이 문제를 해결하기위한 다른 방법을 알고 있으면 매우 감사 할 것입니다.

미리 감사드립니다.

+5

답변을 찾았습니다! 들여 쓰기가 없어야하지만, ifeq와 열린 대괄호 사이에 공백이 있어야합니다. '(문제가 해결되었습니다. 희망이 누군가를 도왔습니다.) ... – Nikola

+0

이것은 나를 조금도 저주했습니다. 감사합니다. – Sam

답변

10

ifeq..., elseendif을 포함한 행은 탭으로 시작하지 않아야합니다. 그들이하는 경우에 그들은 조리법의 한 부분으로 대우되고 포탄에 보내진다; 이로 인해/bin/sh에서 구문 오류가 발생합니다. 예를 들어 the make manual을 참조하십시오.

들여 쓰기를 사용하지 않을 때 왜 오류가 발생하는지 정확히 알지 못합니다. 아마도 이와 같은 레시피에서 변수를 정의 할 수 없습니까?

편집 : 답변을 찾았습니다. 따라서 들여 쓰기가없고 ifeq과 괄호 사이의 공백이 있습니다.