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

我正在写一个Makefile,在一个地方做string匹配,代码是这样的:

if test ...; \ then \ shell scripts... \ fi ifeq ($(DIST_TYPE),nightly) shell scripts ... endif 

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

ifeq(每晚,每晚)

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

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

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

谢谢。

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

如果没有缩进,Make会把它当作自己的指令; 否则,它被视为一个shell脚本。

示例代码

错误:

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

正确:

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

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

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

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

这个问题可以通过使用if函数来解决:

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