大佬教程收集整理的这篇文章主要介绍了在 makefile 中的 make 命令中传递环境变量,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我试图将一个 sHell 变量从一个 makefile 命令传递到另一个命令,但到目前为止还没有成功。
target1:
curl ... ${myvar} ## using myvar from target2
target2:
export myvar=$(sHell curl .....);
echo $myvar
在上面的例子中,我什至没有得到 echo $myvar 的输出。我做错了什么吗?
在 @H_18_5@makefile 中,目标的每一行都在单独的 sHell 中运行。此外,一个命令只能改变它自己和它的孩子的环境。所以当你有:
target2:
export myvar=$(sHell curl .....);
echo $myvar
然后您运行 @H_18_5@make target2,会发生以下情况:
export myvar=...some value...
的 sHell
echo $myvar
的 sHell
首先,这里有一个语法问题:当你写 $myvar
时,这个
将被 @H_18_5@make 解释为对值 $m
的请求
通过文本 yvar
。要访问 sHell 变量,您需要转义
$
,像这样:
echo $$myvar
但这并不能解决这个问题,因为正如我们从上面看到的
顺序,export
命令发生在一个 sHell 进程中
立即退出,因此它实际上对其他任何东西都不可见。
如果您要编写,此目标将按您期望的方式工作:
target2:
export myvar=$(sHell curl .....); \
echo $$myvar
这里,因为我们使用 \
来转义行尾,这是
所有长的“虚拟”行并在单个 sHell 进程中执行,所以
echo
语句会看到前面设置的变量值
声明。
但是没有什么可以在sHell进程中设置环境变量 在一个目标中在另一个目标中可见,因为没有办法得到 这些在同一进程中执行。
如果您需要在 @H_18_5@makefile 中设置可见的变量 在所有目标中,设置 @H_18_5@make 变量:
@H_18_5@myvar = $(sHell curl ...) target1: curl ... $(myvar)
正如您所发现的,一种解决方法是重新执行 @H_18_5@make 作为 来自设置环境的进程内的子进程 变量如下:
target2:
export myvar=$(sHell curl .....); \
echo $$myvar; \
$(MAKE) myvar=$$myvar
但通常这种对 @H_18_5@make 的递归调用会导致更多 复杂的@H_18_5@makefile。
,找到答案了。发布如果有人遇到这个。我需要使用 $$ 而不是 $
target1:
curl ... ${myvar} ## using myvar from target2
target2:
export myvar=$(sHell curl .....);
echo $$myvar
$(MAKE) myvar=$${myvar} target1
以上是大佬教程为你收集整理的在 makefile 中的 make 命令中传递环境变量全部内容,希望文章能够帮你解决在 makefile 中的 make 命令中传递环境变量所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。