在 Makefile 中转义“所有先决条件”变量

在 Makefile 中转义“所有先决条件”变量

假设我们有几个文件,在 shell 中使用时需要引用其名称:

echo A > 'a.$A'
echo B > 'b.$B'

并且有一个 Makefile,其规则取决于这些文件:

all: a.$$A b.$$B
    cat $+

上面的代码适用于名称简单的文件,但适用于它生成的示例中的文件:

cat a.$A b.$B
cat: a.: No such file or directory
cat: b.: No such file or directory

看起来 shell 将$Aand$B表达式扩展为空字符串。

如果我将变量引用为cat '$+',则扩展将被阻止,但所有先决条件都作为单个参数传递:

cat 'a.$A b.$B'
cat: 'a.$A b.$B': No such file or directory

事实上,根据文档:

所有先决条件的名称 [...],它们之间有空格。

问题是,有没有办法获得所有先决条件作为单独的参数,以便能够引用它们?

答案1

使用 GNU Make,您可以使用模式替换将每个单词$+用单引号引起来:

all: a.$$A b.$$B
        cat $(patsubst %,'%',$+)

这不适用于包含空格的先决条件,但 Make 无论如何都无法真正处理这些。

相关内容