Makefile中目标的ifndef变量

4

请相信我:我进行了大量的搜索和测试,但我不知道问题出在哪里:

VERSION := 123

all:
    ifndef VERSION
        $(error VERSION not set)
    else
        $(info Start deploy $(VERSION))
    endif

输出 版本未设置

我真正想要的是像这样调用make:VERSION=1.2.3 make,但即使在Makefile中设置变量也不起作用。

我错过了什么?

1个回答

0

对于我来说,它输出开始部署 123

请注意,ifndef$(error)$(info)都是makefile语法的一部分,而不是属于all目标的配方语法。因此,你的代码等同于:

VERSION := 123
ifndef VERSION
$(error VERSION not set)
else
$(info Start deploy $(VERSION))
endif

谢谢,现在我更加困惑了。在我的Ubuntu服务器上(GNU make 4.1),它也可以工作,在我的Mac上(GNU make 3.81和brew GNU make 4.2)它不能工作。你对“不属于所有”的澄清对我很有帮助,因为我最初想让这些测试在“所有”之前运行,但这似乎也不起作用。 - huehnerhose
好的...终于解决了,感谢 @maxim-egorushkin 的建议。if文本中不要使用缩进。 - huehnerhose
@huehnerhose,make-3.81已经十年老旧了。请使用最新版本。 - Maxim Egorushkin
1
GNU make(与所有GNU实用程序一样)已将其许可证更改为GPLv3。苹果有长期历史从未使用过GPLv3下的任何内容。这就是为什么macOS提供的bash、GNU make和其他GNU实用程序版本如此古老,而且它们永远不会被更新的原因。如果您想要更新的版本,则必须自己下载/安装(从brew或通过源代码),而不是使用随macOS提供的版本。 - MadScientist
3
仅供澄清:您可以使用“缩进”。但是,如果出现在规则上下文中,则不能使用TAB字符进行缩进。如果这样做,则缩进的行被视为规则配方的一部分,并且除非调用配方,否则不会运行缩进的行。基本上,在Makefile中,TAB缩进非常特殊,除了在配方内部,永远不应在任何其他位置使用。使用空格进行缩进完全无害,没有任何特殊之处。 - MadScientist

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接