给出如下所示的Makefile,如何使用FOOBAR
将foo /home/scott
的值设置为$MAKEFLAGS
?
FOO=foo
FOOBAR=$(FOO) bar
$(info $$FOOBAR is [$(FOOBAR)])
我知道我能做到
$ make FOOBAR="\$(FOO) $HOME"
$FOOBAR is [foo /home/scott]
这很好用
$ MAKEFLAGS="FOOBAR=foo\ $HOME" make
$FOOBAR is [foo /home/scott]
有趣的是,这不能很好地工作
$ MAKEFLAGS="FOOBAR='foo $HOME'" make
$FOOBAR is ['foo]
我的目标是这样的,但是请尝试,我可能无法实现
$ export MAKEFLAGS="FOOBAR=\$(FOO)\ $HOME" # <-- this line is wrong
$ make
$FOOBAR is [foo /home/scott] # <-- not the real output
其实际输出是
$ export MAKEFLAGS="FOOBAR=\$(FOO)\ $HOME"
$ make
$FOOBAR is [/home/scott]
如何使用变量替代$MAKEFLAGS
替代?
(首选POSIX标准解决方案,但仅适用于GNU的解决方案。)
((为什么需要这个?我想覆盖我使用pyenv的python-build构建的Python使用的变量。我发现python-build暴露了$MAKE_OPTS
,该结果证明可以工作,但现在我很好奇为什么我以前的尝试失败了。)
这是因为MAKEFLAGS
被立即替换,所以在甚至定义FOO
之前,它就解析为空字符串。如果您想推迟解决方案,则需要将美元提高一倍,例如:
$ export MAKEFLAGS="FOOBAR=\$\$(FOO)\ $HOME"
$ make
$FOOBAR is [foo /home/raspy]