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
(可能在您的发行版之外)。
我在 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
(可能在您的发行版之外)。