Makefile 中的 ONESHELL 无法与亚马逊上的 bash 一起使用 Linux 2 ami

ONESHELL in Makefile not working with bash on Amazon Linux 2 ami

我在 EC2 实例上使用此 Amazon Linux 2 AMI:amazon/amzn2-ami-hvm-2.0.20210525.0-x86_64-gp2

这个 Makefile 工作正常:

.SHELLFLAGS := -euo pipefail -c   
SHELL := bash

all:
    echo here

当我 运行 make all 我得到:

bash-4.2$ make all
echo here
here

然后我将 .ONESHELL: 添加到 Makefile:

.ONESHELL:

.SHELLFLAGS := -euo pipefail -c   
SHELL := bash

all:
    echo here

现在当我 运行 make all 我得到:

bash-4.2$ make all
echo here
bash: line 0: bash: echo here: invalid option name
make: *** [all] Error 2

Bash版本:

GNU bash, version 4.2.46(2)-release (x86_64-koji-linux-gnu)

制作版本:

GNU Make 3.82
Built for x86_64-koji-linux-gnu

如果我删除 .SHELLFLAGS 它将 运行 成功,所以这似乎是两者的结合的问题。似乎在使用 ONESHELL 时,SHELLFLAGS 也会损坏。

它是 make 3.82 中的 bug,已在 4.0 中修复。当同时使用 .ONESHELL.SHELLFLAGS 时,标志未正确标记。

您需要放弃两者之一或升级您的 make(可能在您的发行版之外)。