我的 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
正如评论中所说,从当前(4.3)GNU Make 版本开始,没有办法。而且任何添加都可能需要很长时间才能到达公众手中(WSL 仍然停留在 4.2.1!!!)。
我可以想到一些根据具体情况可能有用的拐杖:
--warn-undefined-variables
进行制作,然后通过管道输出到例如grep
测试是否存在警告消息。适合构建自动化,其中命令行长度和复杂性并不重要,而对于交互式使用则不太重要。ifndef
和 error
块。您需要为每个变量提供一个特定的块,但这与单元测试的工作方式并不太远,并且这些被普遍接受:-)$(PRETTIER)
,您可以将其初始化为 false
,默默地吃掉任何参数并返回失败。可行性取决于变量的使用方式。对于用作命令的变量效果很好,对于参数可能会变得更棘手,尽管我确信一些黑客应该起作用(因为故意编写崩溃代码有多难)。