是的。真是一团糟。
因此,shell 在启动 make 命令之前会删除第一组引号。由于外部引号是双引号,因此您必须转义,$
否则 shell 会将其视为 shell 变量(与类似命令echo "my path is $PWD"
以及PWD
变量的扩展方式进行比较)。shell 使用反斜杠来引用诸如$
.
因此,当 shell 将命令行交给 make 时,它会看到设置LDFLAGS=-Wl,-rpath '-Wl,$$ORIGIN'
你的 makefile 中的下一个将是一个带有如下命令的配方:
$(LD) $(LDFLAGS) ...
Make 将LDFLAGS
如上扩展变量。对于 make,任何以 a 开头的名称$
都被认为是一个 make 变量,你可以通过加倍$
(不使用 shell 之类的反斜杠)并编写$$
. Make 将$
在扩展期间删除一个。
因此,make 将简化LDFLAGS
为字符串-Wl,-rpath '-Wl,$ORIGIN'
并将其传递给 shell。
shell 将去掉下一级的引用,在这种情况下是单引号。变量不会在单引号内展开,因此链接器实际上从字面上获取参数-Wl,-rpath
和-Wl,$ORIGIN
,这就是您想要的。