【问题标题】:Make error for ifeq: syntax error near unexpected token为 ifeq 出错:意外标记附近出现语法错误
【发布时间】:2011-05-27 20:48:24
【问题描述】:

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

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

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

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

ifeq(每晚,每晚)

/bin/sh: -c: line 0: 意外标记 `nightly,nightly' 附近的语法错误

/bin/sh: -c: line 0: `ifeq (nightly,nightly)'

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

【问题讨论】:

  • 您将sh 中的条件语句(例如第一个)与make 中的条件语句(例如第二个)混淆了。

标签: makefile


【解决方案1】:

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

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

示例代码

错误:

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

正确:

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

【讨论】:

  • 我只是想感谢您的回答。我还在其中添加了一个示例。 :)
  • 这太不明显了,感谢您的回答,为我节省了数小时的挫败感
  • 哇一直在寻找如何让 if/else 在我的 makefile 中工作。这太简单了,但在任何地方都没有看到!谢谢!
  • 有趣的是,这是互联网上唯一的例子。非常感谢。
  • Makefile 获得了“迄今为止历史上最少逻辑语法”的奖项... ;D 谢谢你的回答!
【解决方案2】:

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

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

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

这个问题可以改用 if 函数来解决:

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

【讨论】:

  • 为我节省了很多时间 :)
猜你喜欢
  • 2017-12-03
  • 2022-01-18
  • 2012-08-31
  • 2012-10-20
  • 2012-09-29
  • 2013-12-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多