endif 之后的 Makefile 无条件步骤导致错误

问题描述 投票:0回答:1

我是新来的。 我想要在我的 Makefile 中添加一个条件,然后是无条件的步骤

根据制作手册,这应该是可能的:

每个条件都必须以 endif 结尾。无条件 makefile 文本如下。

以下代码可以工作,但不会分配新值

a = something
b =

build:
ifeq ($(a),)
    b=yes
else
    b=no
endif
    $(info what_is_b=$(b))
    @echo $(b)
    @echo "end of condition"

此代码确实有效,但退出时出现错误,并且两个

echo
语句被跳过(添加选项卡时
info
也是如此):

a = something
b =

build:
ifeq ($(a),)
b=yes
else
b=no
endif
$(info what_is_b=$(b))
    @echo $(b)
    @echo "end of condition"

结果:

$ make build
what_is_b=no
Makefile:11: *** recipe commences before first target.  Stop.

这里出了什么问题?

此外,在搜索时,我只能找到其中

endif
后面跟着另一个
if...
但从未找到 无条件 步骤的示例。

我正在使用 GNU Make 4.4

makefile gnu-make
1个回答
0
投票

它与条件无关。并且不要将 makefile 误认为是脚本。

makefile 包含的唯一语义上有意义的内容是宏(变量)的定义和指定先决条件和/或特定目标的构建配方的规则。初步估计,这些配方是唯一可以合理地称为“步骤”的内容出现在 makefile 中的上下文。 (您示例中的

$(info ...)
是一种特殊情况。)

在您的特定示例中,条件子句内部只有变量定义,这些定义在食谱之外是允许的,但是

make
抱怨的行是 not 定义,并且 not 允许在食谱之外。如果它们在条件语句中,Make 仍然会抱怨它们。

© www.soinside.com 2019 - 2024. All rights reserved.