如果Makefile遇到未定义的变量就让make失败

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

我的 Makefile 中有一个错误:

verify-prettier:
    $(PRETTIER) --check **/*.yaml **/*.yml

var PRETTIER 未设置。

结果:

check **/*.yaml **/*.yml
bash: line 1: check: command not found
make: [Makefile:156: verify-prettier] Error 127 (ignored)

如果我不小心有一个未定义的变量,我想得到一个错误(不会被忽略)。

有没有办法相应地配置make?

版本:GNU Make 4.3

我们不需要支持其他 make 实现。

我知道这一点,但我希望它失败,而不仅仅是警告。

MAKEFLAGS=--warn-undefined-variables

换句话说:如果 shell 上有类似

set -u
的东西就好了(替换时将未设置的变量视为错误)。

更新,由于到目前为止这似乎不可用,我创建了一个功能请求:https://savannah.gnu.org/bugs/?63737

makefile gnu-make
1个回答
1
投票

正如评论中所说,从当前(4.3)GNU Make 版本开始,没有办法。而且任何添加都可能需要很长时间才能到达公众手中(WSL 仍然停留在 4.2.1!!!)。

我可以想到一些根据具体情况可能有用的拐杖:

  • 通过
    --warn-undefined-variables
    进行制作,然后通过管道输出到例如
    grep
    测试是否存在警告消息。适合构建自动化,其中命令行长度和复杂性并不重要,而对于交互式使用则不太重要。
  • makefile 末尾有
    ifndef
    error
    块。您需要为每个变量提供一个特定的块,但这与单元测试的工作方式并不太远,并且这些被普遍接受:-)
  • 默认初始化会失败。对于
    $(PRETTIER)
    ,您可以将其初始化为
    false
    ,默默地吃掉任何参数并返回失败。可行性取决于变量的使用方式。对于用作命令的变量效果很好,对于参数可能会变得更棘手,尽管我确信一些黑客应该起作用(因为故意编写崩溃代码有多难)。
© www.soinside.com 2019 - 2024. All rights reserved.