如何在MAKEFILE_LIST中通过扩展美元符号来阻止GNU make?

时间:2017-04-18 07:26:21

标签: shell makefile gnu-make

运行

echo -e "all:\n\techo '\$(value MAKEFILE_LIST)'" > /tmp/foo\$bar.mk
make -f /tmp/foo\$bar.mk

将打印

echo ' /tmp/fooar.mk'
/tmp/fooar.mk

由此我们可以看到MAKEFILE_LIST包含扩展的文件名。

如何获取Makefile的正确名称(包括美元符号)?

我的版本:GNU Make 4.2.1。

我的动机:实际上美元符号是我的Makefile的路径的一部分。我无法重命名该路径,因为它来自Samba共享,将运行make的人必须使用。

更新

http://savannah.gnu.org/bugs/?50823的形式提交到上游。

更新

https://savannah.gnu.org/bugs/?50823#comment1提供的建议补丁。

1 个答案:

答案 0 :(得分:2)

这是一个黑客,但无论如何:你可以定义 make 变量b=$$b

$ cat '/tmp/foo$bar.mk'
all:
        echo '$(value MAKEFILE_LIST)'
$ gmake -f /tmp/foo\$bar.mk b='$$b'
echo ' /tmp/foo$bar.mk'
 /tmp/foo$bar.mk

这不会阻止扩展,但会使扩展成为无操作。