bash - 在 Makefile 中使用 bash 变量

标签 bash makefile environment-variables timing

我想在我的 makefile 中使用 bash 计时变量 例如在我的终端我可以这样做并且它有效

 MY_TIME=$SECONDS 
 echo $MY_TIME

但是当我在我的 makefile 中写这个时它不起作用

如何在我的 make 文件中使用这两行?

这就是我在做的事情

.PHONY: myProg
myProg:
      MY_TIME=$SECONDS 
      echo $MY_TIME

在 Etan Reisner 的回答之后

这是我现在拥有的

.PHONY: myProg
 myProg:
        MY_TIME= date; echo $MY_TIME

但是我的回显结果是一个空行,它看起来不像是在存储日期

最佳答案

美元符号 ($MY_TIME) 指的是 make 变量,它与 bash 变量 不同。

要访问 bash 变量,您必须使用双美元表示法 ($$MY_TIME) 对美元进行转义。

.PHONY: myProg
myProg:
  MY_TIME=$$SECONDS ; echo $$MY_TIME

Etan answer 中所述您不能将代码分成多行(除非您使用反斜杠),因为每个命令都在不同的子 shell 中执行,使得其他行无法访问变量。

在下面的示例中,SECONDS 的值将始终为 0,因为它会在第二行的 shell 生成时重置。

.PHONY: myProg
myProg:      # WRONG
  MY_TIME=$$SECONDS
  echo $$MY_TIME

关于bash - 在 Makefile 中使用 bash 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29500434/

相关文章:

java - 如何强制Java重新加载环境变量

linux - 使用 bash 以特定方式输出文本文件的值?

linux - 如何修改/子集 wget 脚本以指定日期范围以仅将某些年份下载到不同的脚本中?

bash - 通过 xargs realpath 管道时如何过滤不存在​​的文件?

makefile - GNU Make中通配符目标的正确方法

makefile - GNU make 中的错误 : target-specific variables are not expanded in implicit rules?

c - 设置为空环境变量的其他包含目录会中断 Visual C++ 构建

linux - Bash 脚本自动通过电子邮件发送变量文件名和相应的修改日期时间戳

c - 编译时设置共享库前缀

c# - 应用程序如何访问另一个应用程序设置的环境变量?