Makefile 为ifeq生成错误:意外标记附近的语法错误
我正在编写一个Makefile,它在一个地方进行字符串匹配,代码如下: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”附近的语法错误
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
中的条件语句(如第二个)混淆。为我节省了很多时间:)