【问题标题】:Why might a variable be empty in a Makefile but not the terminal? [duplicate]为什么 Makefile 中的变量可能为空,但终端中的变量可能为空? [复制]
【发布时间】:2021-01-22 18:35:22
【问题描述】:

在 Makefile 中,我有如下配方:

date:
    echo $(date +"%m-%d-%Y %T") 

当我在终端中执行这个配方/makefile 时,echo 只打印一个空行。但是,如果我直接在终端中执行 echo 命令,它会打印出类似“01-22-2021 12:34:49”的内容。为什么我的 makefile 无法正常工作,我该怎么做才能修复它?我最好的猜测是它可能与makefile中的每一行如何在单独的shell中执行有关,但这似乎是一个弱猜测,我不知道该怎么做或我可以尝试什么......请帮助。

注意:我知道有其他方法可以获得正确的输出(即类似于我的终端打印的内容)。例如,我发现在我的 makefile 中使用下面的代码可以满足我在特定情况下的需要。随意分享获得此类结果的替代方法,但我试图提出的核心问题是 makefile 失败的原因,所以请尽可能解决这个问题。

date:
    date +"%m-%d-%Y %T" >> fake.log

【问题讨论】:

  • 这可能会有所帮助:Makefile command substitution problem
  • 虽然您可以使用上面链接中描述的$(shell,但我认为这不是 OP 尝试做的正确解决方案——请参阅this 以了解双美元符号。

标签: bash makefile


【解决方案1】:

试试这个

date:
    echo $(shell date +"%m-%d-%Y %T") 

Make 不知道你在做什么

【讨论】:

  • 我建议在echo之前插入一个标签。
  • 使用 $(shell 将导致 make 在解析时运行命令,而不是在 shell 命令实际运行时运行。你应该做echo $$(date +"%m-%d-%Y %T"),这将导致make运行echo $(date +"%m-%d-%Y %T")到shell,并且当shell运行这个命令时日期得到扩展。
猜你喜欢
  • 1970-01-01
  • 2021-03-13
  • 1970-01-01
  • 2023-01-17
  • 1970-01-01
  • 1970-01-01
  • 2012-12-23
相关资源
最近更新 更多