Makefile目标内嵌入ifeq条件语句执行报错的原因咨询
问题原因分析与修正方案
这个报错的核心问题很明确:你混淆了Makefile的两种语法行规则。
在Makefile里,行分为两类:
- Make自身语法行:比如条件判断(
ifeq/endif)、变量定义、规则声明这些,属于Make的解析逻辑,这类行绝对不能以Tab开头; - Shell命令行:也就是规则目标下要实际执行的命令(比如你的
echo hello),这类行必须以Tab开头,Make才会把它们交给系统shell去执行。
你写的代码里,ifeq (0,0)和endif本来是Make的条件判断语句,结果给它们加了Tab前缀,Make就误以为这是要执行的shell命令,直接传给/bin/sh去处理了——但shell完全不认识ifeq这种Make专属语法,自然就抛出了“unexpected token”的语法错误。
修正后的正确代码
all: ifeq (0,0) echo hello endif
只需要把ifeq和endif前面的Tab去掉,保留echo hello前的Tab(因为这是真正要执行的shell命令),再执行make就会正常输出hello了。
内容的提问来源于stack exchange,提问作者francesco
相关产品推荐
相关产品推荐

