在 MAKEFLAGS 中传递要扩展的变量
Pass Variable to be Expanded in MAKEFLAGS
给定如下所示的 Makefile,如何使用 $MAKEFLAGS
将 FOOBAR
的值设置为 foo /home/scott
?
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 解决方案也可以。)
(为什么我需要这个?我想覆盖 Python 使用的变量,我正在用 pyenv 的 python-build 构建它。我发现 python-build 暴露了$MAKE_OPTS
结果成功了,但现在我很好奇为什么我之前的尝试都失败了。)
这是因为 MAKEFLAGS
被立即替换,所以在您的 FOO
甚至被定义之前它就解析为一个空字符串。如果你想推迟决议,你需要加倍美元,例如:
$ export MAKEFLAGS="FOOBAR=$$(FOO)\ $HOME"
$ make
$FOOBAR is [foo /home/raspy]
给定如下所示的 Makefile,如何使用 $MAKEFLAGS
将 FOOBAR
的值设置为 foo /home/scott
?
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 解决方案也可以。)
(为什么我需要这个?我想覆盖 Python 使用的变量,我正在用 pyenv 的 python-build 构建它。我发现 python-build 暴露了$MAKE_OPTS
结果成功了,但现在我很好奇为什么我之前的尝试都失败了。)
这是因为 MAKEFLAGS
被立即替换,所以在您的 FOO
甚至被定义之前它就解析为一个空字符串。如果你想推迟决议,你需要加倍美元,例如:
$ export MAKEFLAGS="FOOBAR=$$(FOO)\ $HOME"
$ make
$FOOBAR is [foo /home/raspy]