2011-04-19 70 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和括号之间的空格。