假设我们有几个在 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 将$A
and$B
表达式扩展为空字符串。
如果我将变量引用为cat '$+'
,则会阻止扩展,但所有先决条件都作为单个参数传递:
cat 'a.$A b.$B'
cat: 'a.$A b.$B': No such file or directory
根据文档,这是一个单一参数的事实是可以预料的:
所有先决条件的名称 […],它们之间有空格。
问题是,有没有办法将所有先决条件作为单独的论据来引用它们?
使用 GNU Make,您可以使用模式替换将每个单词
$+
用单引号括起来:这不适用于包含空格的先决条件,但 Make 无论如何也无法真正处理这些。