gpt4 book ai didi

Makefile——如果变量未设置则出错

转载 作者:行者123 更新时间:2023-12-02 22:08:25 26 4
gpt4 key购买 nike

遵循 Abort makefile if variable not set 的建议我正在尝试使用 ifndef 但它不起作用。

生成文件:

foo:
ifndef BAR
$(error "Must set BAR")
endif

但是 make foo BAR=quux 不起作用:

Makfile:2: *** "Must set BAR". Stop.

什么给了?是空格问题吗?还是我完全误解了?

(我正在使用 GNU Make)

我也尝试过:

foo:
ifndef BAR
$(error "Must set BAR")
endif
echo $(BAR)

这似乎有点工作,但如果调用 Makefile 中更靠下的目标(不需要设置变量),仍然会导致调用 ifndef

最佳答案

从技术上讲,是的,这是一个空白问题,但更根本的是,这是一个范围问题。

ifndef...endif 是一个 Make 条件。所以Make会在执行任何规则之前对其进行评估。由于 ifndef 不是配方的一部分,因此它前面不应该有 TAB。这有效:

ifndef BAR
$(error "Must set BAR") # this is a Make error
endif

foo:
ifndef BAR
echo "Must set BAR" # this is a shell command
exit 1 # this is another shell command
endif

但是你所做的是这样的:

foo:
ifndef BAR
$(error "Must set BAR")
endif

在三行(ifndef...$(error...endif)前面放置一个 TAB,所以 Make 假设这些是命令,当执行 foo 配方时将被传递到 shell。当 Make 执行规则时,它扩展了 Make 语法语句 $(error ...) - 并因错误而终止 - 在将任何内容传递给 shell 之前。

关于Makefile——如果变量未设置则出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38777722/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com