我试图在我的规则模式中使用ifeq,但我遇到了问题。这是我遇到问题的原则:
$(OBJS): $(OBJDIR)/%.o : ../%.c
@mkdir -p $(dir $@)
ifeq(mcc.exe,$(CC))
o_file:=$(shell echo $@ | sed -e 's/\/cygdrive\///' | sed -e 's/\([a-zA-Z]\)/\1:/')
$(CC) $(CFLAGS) $< -o $(o_file)
else
$(CC) $(CFLAGS) $< -o $@
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)'"
但是,当我不使用indention时,我得到:“Makefile:77: * 缺少分隔符。停止。”
我在Cygwin上使用GNU make 3.81。 ifeq的整个问题来自于我有两个工具链的相同Makefile,其中一个(mcc.exe)无法处理/cygdrive/c/.../something路径,但应该有c: /.../something路径。如果您知道其他任何解决方法,我也将非常感激!
提前谢谢!
答案 0 :(得分:12)
包含ifeq...
,else
和endif
的行不应以标签开头。如果他们这样做,他们被视为食谱的一部分,并被送到壳;这导致你从/ bin / sh得到的语法错误;请参阅the make manual以获取示例。
我不确定为什么在不使用缩进时会出现错误。也许你不能在像这样的食谱中定义一个变量?
编辑:我看到你找到了答案。因此,没有缩进,ifeq
和括号之间的空格。