程序问答   发布时间:2022-06-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了在 makefile 中的 make 命令中传递环境变量大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决在 makefile 中的 make 命令中传递环境变量?

开发过程中遇到在 makefile 中的 make 命令中传递环境变量的问题如何解决?下面主要结合日常开发的经验,给出你关于在 makefile 中的 make 命令中传递环境变量的解决方法建议,希望对你解决在 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,会发生以下情况:

    @H_168_26@make 启动一个运行 export myvar=...some value... 的 sHell
  1. sHell 退出。
  2. @H_168_26@make 运行另一个运行 echo $myvar 的 sHell
  3. 那个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,请注明来意。