您可以使用以下命令显式设置makefile使用的shell:
SHELL := /bin/bash
将#!/bin/bash
替换为bash strict mode
标题的其余部分吗?
set -euo pipefail
IFS=$'\n\t'
答案 0 :(得分:1)
make规则中的每一行都是一个新的子shell,因此没有标题不会直接结转。
一个选项是为make规则的每一行添加前缀:
my-rule:
set -euo pipefail; \
IFS=$'\n\t'; \
<the rest of your line>
另一种选择是在make脚本调用的shell脚本中使用bash strict模式:
my-rule:
./my-script-with-bash-strict-mode.sh
另一种选择是将所有规则包含在具有该标头的规则下。假设您的makefile只有一个入口点。
my-top-level-rule:
set -euo pipefail; \
IFS=$'\n\t'; \
${MAKE} <my-other-rule>
答案 1 :(得分:0)
你可以用类似的东西来启动你的 Makefile
SHELL := bash
.SHELLFLAGS := -eu -o pipefail -c
这会处理 set -euo pipefail
。
我还没有找到为每个 shell 命令设置 IFS
的方法。普通环境变量可以用
export MY_VAR := my-val
然后在每个 shell 中都可用,但我无法让它与 IFS
一起使用。