【问题标题】:Bash missing $(HOME) variableBash 缺少 $(HOME) 变量
【发布时间】:2016-06-01 18:32:11
【问题描述】:

我使用Makefile 编译应用程序已经有一段时间了,没有任何问题。今天,我意识到我的Makefile 不再工作了。调试了一下,很快发现$(HOME)没有定义

$echo $(HOME)
-bash: HOME: command not found

我一直认为$HOME$(HOME) 可以互换使用。是否有理由将系统配置为避免使用$(HOME)

【问题讨论】:

  • Make 和 Bash 使用不同的语法。为另一个运行代码并不是一个好主意。

标签: bash shell makefile


【解决方案1】:

这是${HOME},而不是$(HOME)

$(HOME) 将扩展为HOME 命令的输出。由于(可能)没有这样的命令,您会收到一条错误消息。

但是,$(HOME) 是 Makefile 中的正确语法。如果您需要帮助调试您的 Makefile,您需要向我们展示其中的内容——或者,更好的是,展示相同问题的小型 Makefile。 make 规则如下:

target:
        echo $(HOME)

应该在你运行make target时打印你的主目录的路径。

在shell中,可以将HOME变量引用为$HOME${HOME};后者可以避免相邻标记的问题。

在 Makefile 中,您可以使用$(HOME)${HOME},但$(HOME) 形式更常见。仅当变量名称为一个字符长时,您才可以省略括号(但即使如此,您也应该使用它们以清楚起见)。 (没有人声称make 是一种清晰直观的语法模型。)

【讨论】:

  • 这绝对应该是评论和近距离投票。你应该更了解
  • @hek2mgl:我不同意。如果您愿意,请随时投票关闭。
  • @hek2mgl 我实际上认为这是建设性的
  • 一个“简单的印刷错误”是一个接近投票的原因。在我看来,误解 shell 语法并不是一个错字。您是否引用了您的陈述,即语法错误根据定义是关闭问题的原因?
  • @KeithThompson 我今天又读了一遍,我需要说的是,OP 明确指出 Makefile 语法这一事实在这个问题和其他明显偏离主题的问题之间有一点区别。可能我在这里反应过度了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-28
  • 2015-07-25
  • 2012-09-11
  • 2018-12-21
  • 2020-08-01
  • 2012-06-24
相关资源
最近更新 更多