ifeq:在意外令牌附近出现语法错误

时间:2010-12-19 14:16:15

标签: makefile

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

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

ifeq ($(DIST_TYPE),nightly)
    shell scripts ...
endif

这里第一个if是shell脚本,第二个ifeq是GNU Make的条件。但是会生成以下错误:

  

ifeq(每晚,每晚)

     

/ bin / sh:-c:第0行:意外令牌附近的语法错误`每晚,每晚'

     

/ bin / sh:-c:第0行:`ifeq(每晚,每晚)'

这里发生了什么?似乎Make正试图调用shell。

谢谢。

2 个答案:

答案 0 :(得分:198)

我玩了代码,发现条件语句应该写成没有缩进,这解决了我的问题。

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

示例代码

错:

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

正确:

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

答案 1 :(得分:6)

此外,如果条件语句用于定义函数,例如:

define myFunc
ifeq (foo, bar)
    ...
endif
endef

在这种情况下,Make也会将其视为shell脚本。

这个问题可以通过使用if-function来解决:

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