Makefile 为ifeq生成错误:意外标记附近的语法错误

Makefile 为ifeq生成错误:意外标记附近的语法错误,makefile,Makefile,我正在编写一个Makefile,它在一个地方进行字符串匹配,代码如下: if test ...; \ then \ shell scripts... \ fi ifeq ($(DIST_TYPE),nightly) shell scripts ... endif 这里第一个if是shell脚本,第二个ifeq是gnumake的条件脚本。但是,会产生以下错误: ifeq(夜间,夜间) /bin/sh:-c:第0行:意外标记“nightly,nightly”附近的语法错误

我正在编写一个Makefile,它在一个地方进行字符串匹配,代码如下:

if test ...; \
    then \
    shell scripts... \
fi

ifeq ($(DIST_TYPE),nightly)
    shell scripts ...
endif
这里第一个
if
是shell脚本,第二个
ifeq
是gnumake的条件脚本。但是,会产生以下错误:

ifeq(夜间,夜间)

/bin/sh:-c:第0行:意外标记“nightly,nightly”附近的语法错误

/bin/sh:-c:第0行:`ifeq(夜间,夜间)'

这里发生了什么事?看来Make正试图称之为shell


谢谢。

我仔细研究了代码,发现编写条件语句时不应缩进,这就解决了我的问题

如果没有缩进,Make会将其视为自身的指令;否则,它将被视为一个shell脚本

示例代码 错:

target:
    ifeq (foo, bar)
        ...
    endif
正确:

target:
ifeq (foo, bar)
    ...
endif

此外,如果在定义函数中使用条件语句,如:

define myFunc
ifeq (foo, bar)
    ...
endif
endef
在这种情况下,Make还将把它作为shell脚本处理

使用if函数可以解决此问题:

define myFunc
    $(if condition,then-part[,else-part])
endef

我只是想感谢你的回答并向你致敬。我还添加了一个示例。:)这太不明显了,谢谢你的回答,省去了我几个小时的沮丧。哇,我一直在寻找如何让if/else在我的makefile中工作。这太简单了,但在任何地方都没有看到!谢谢有趣的是,这是互联网上唯一的例子。非常感谢。而“迄今为止历史上最不符合逻辑的语法”奖将授予Makefile;D谢谢你的回答!您将
sh
中的条件语句(如第一个)与
make
中的条件语句(如第二个)混淆。为我节省了很多时间:)