2011-04-19 69 views
7

我想在我的規則模式中使用ifeq,並且遇到問題。這是我遇到的麻煩的規則:Makefile ifeq問題

$(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 

當我跑,我得到:

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

但是,當我不使用縮進,然後我得到:「生成文件:77 :*缺失分隔符。停止。「

我在Cygwin上使用GNU make 3.81。 ifeq的全部問題來自這樣一個事實,即我有兩個工具鏈相同的Makefile,其中一個(mcc.exe)無法應付/cygdrive/c/.../something路徑,但是應該有c: /.../東西路徑。如果你知道任何其他方法來解決這個問題,我會非常感激!

預先感謝您!

+5

我找到了答案!應該沒有縮進,但ifeq和開放支架之間應該有空間'('。這解決了問題!希望這可以幫助別人... – Nikola 2011-04-19 10:23:23

+0

這讓我有點難受,謝謝 – Sam 2012-01-03 17:36:23

回答

10

包含ifeq...,else和的行不應該以選項​​卡開頭。如果他們這樣做,他們被視爲配方的一部分,併發送到殼;這會導致你從/ bin/sh得到的語法錯誤;舉例來說,參見the make manual

我不完全確定爲什麼當你不使用縮進時出現錯誤。也許你不能在這樣的配方中定義一個變量?

編輯:我看到你找到了答案。所以,沒有縮進,以及ifeq和括號之間的空格。