可以在makefile中使用bash strict模式吗?

时间:2016-05-10 18:53:11

标签: bash makefile

您可以使用以下命令显式设置makefile使用的shell:

SHELL := /bin/bash

#!/bin/bash替换为bash strict mode标题的其余部分吗?

set -euo pipefail
IFS=$'\n\t'

http://redsymbol.net/articles/unofficial-bash-strict-mode/

2 个答案:

答案 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 一起使用。