Makefile ifeq问题

Nik*_*ola 7 cygwin makefile path

我试图在我的规则模式中使用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
Run Code Online (Sandbox Code Playgroud)

当我运行这个时,我得到:

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

但是,当我不使用indention时,我得到:"Makefile:77:*缺少分隔符.停止."

我在Cygwin上使用GNU make 3.81.ifeq的整个问题来自于我有两个工具链的相同Makefile,其中一个(mcc.exe)无法处理/cygdrive/c/.../something路径,但应该有c: /.../something路径.如果您知道其他任何解决方法,我也将非常感激!

先感谢您!

eri*_*ous 13

包含ifeq...,, elseendif不应以制表符开头的行.如果他们这样做,他们被视为食谱的一部分,并被送到壳; 这导致你从/ bin/sh得到的语法错误; 有关示例,请参阅make手册.

我不确定为什么在不使用缩进时会出现错误.也许你不能在这样的食谱中定义一个变量?

编辑:我看到你找到了答案.因此,没有缩进,以及ifeq括号之间的空格.