如何在Makefile(POSIX)中使用的sed命令中保持换行符完整?

时间:2019-03-10 18:25:07

标签: sed makefile escaping posix newline

注意:这不是Is it possible to create a multi-line string variable in a Makefile和其他此类问题的重复。这个问题要求不依赖纯Bash或仅GNU Make的功能的POSIX兼容解决方案。关于堆栈溢出的另一个问题没有此要求。

在macOS High Sierra上使用BSD sed获取此Shell脚本:

printf 'foo\nbaz\n' | sed '/foo/a\
bar
'

输出为:

foo
bar
baz

如何将相同的内容放入Makefile中?这是我尝试过的方法,但似乎不起作用:

all:
    printf 'foo\nbaz\n' | sed '/foo/a\\
    bar\
    '

这会导致错误:

$ make
printf 'foo\nbaz\n' | sed '/foo/a\\
/bin/sh: -c: line 0: unexpected EOF while looking for matching `''
/bin/sh: -c: line 1: syntax error: unexpected end of file
make: *** [all] Error 2

如何将上述sed调用正确地写入Makefile中,以便make执行all目标时,它将尾部斜杠和换行符正确地输入到shell中? >

注意:我希望Makefile符合POSIX,并且仅使用http://pubs.opengroup.org/onlinepubs/9699919799/utilities/make.html中的功能。

1 个答案:

答案 0 :(得分:-1)

您只能通过在单独的Shell脚本中编写配方并调用它,而不是在制作配方中对其进行开放编码来实现。