我正在编写一个在一个地方进行字符串匹配的Makefile,代码如下:
if test ...; \
then \
shell scripts... \
fi
ifeq ($(DIST_TYPE),nightly)
shell scripts ...
endif
Run Code Online (Sandbox Code Playgroud)
这里第一个if是shell脚本,第二个ifeq是GNU Make的条件.但是会生成以下错误:
ifeq(每晚,每晚)
/ bin/sh:-c:第0行:意外令牌附近的语法错误`每晚,每晚'
/ bin/sh:-c:第0行:`ifeq(每晚,每晚)'
这里发生了什么事?似乎Make正试图调用shell.
谢谢.
Rya*_* Li 225
我玩了代码,发现条件语句应该写成没有缩进,这解决了我的问题.
如果没有缩进,Make会将其视为自己的指令; 否则,它被视为shell脚本.
错误:
target:
ifeq (foo, bar)
...
endif
Run Code Online (Sandbox Code Playgroud)
正确:
target:
ifeq (foo, bar)
...
endif
Run Code Online (Sandbox Code Playgroud)
小智 7
此外,如果条件语句用于定义函数,例如:
define myFunc
ifeq (foo, bar)
...
endif
endef
Run Code Online (Sandbox Code Playgroud)
在这种情况下,Make也会将其视为shell脚本.
这个问题可以通过使用if-function来解决:
define myFunc
$(if condition,then-part[,else-part])
endef
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
24295 次 |
| 最近记录: |