【问题标题】:Why $$PWD instead of $PWD in TI x-loader makefile for omap devices为什么在用于 omap 设备的 TI x-loader makefile 中使用 $$PWD 而不是 $PWD
【发布时间】:2014-01-13 07:49:15
【问题描述】:

我开始分析 TI X-Loader,包括它的 makefile。我在顶部的 makefile 中找到了以下几行:

TOPDIR := $(shell if [ "$$PWD" != "" ]; then echo $$PWD; else pwd; fi)

ifeq (include/config.mk,$(wildcard include/config.mk))
...

关于第一行:我知道“$PWD”表示 PWD(工作目录)的值
我的问题:
为什么在这种特殊情况下使用双美元符号?

关于第二行:我试图了解比较的内容和原因。 我已经红了 GNU MAKE 手册通配符解释。我仍然缺少一些东西。

我的问题:
“$(通配符”)是干什么用的?
哪些 config.mk 文件是相互比较的?
为什么要比较它们? (这个问题更多是关于makefile结构)

提前感谢您的帮助。

马丁

【问题讨论】:

  • 1.避免在同一个问题中发布多个查询。 2、$$用于引用shell变量,$引用make变量。 3. wildcard 这一行似乎是多余的。

标签: linux makefile embedded gnu


【解决方案1】:

在 make 中,您使用两个美元符号 ($$) 转义一个美元符号(这样它就不会被 make 扩展)。所以,如果你写$PWD,那么make 会将$P 解释为make 变量引用,它可能没有设置并且是空的,结果(传递给shell)将是WD。如果你使用$$PWD,那么美元符号会被转义,传递给shell命令的结果将是$PWD,这就是你想要的。

对于第二行,如果没有与通配符匹配的文件,wildcard 函数将展开为空字符串。所以这个wildcard 的调用是在测试文件include/config.mk 是否存在。如果是这样,那么函数的结果将是include/config.mk 并且ifeq 测试将为真。如果不是,则结果将是空字符串,ifeq 测试将为假。

这里没有比较 include/config.mk 的内容或时间戳或其他任何内容。这纯粹是“这个文件存在吗?”测试。

【讨论】:

  • 感谢您的回答。我明白了。
猜你喜欢
  • 2015-08-04
  • 1970-01-01
  • 1970-01-01
  • 2021-02-19
  • 2014-11-26
  • 2023-03-24
  • 1970-01-01
  • 1970-01-01
  • 2012-03-29
相关资源
最近更新 更多