为什么在OEM x-loader makefile中为omap设备提供了$ PWD而不是$ PWD

时间:2014-01-13 07:49:16

标签: linux makefile embedded gnu

我开始分析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 个答案:

答案 0 :(得分:1)

在make中,你使用两个美元符号($$)来逃避一个美元符号(这样它不会被make扩展)。因此,如果您编写$PWD,则make会将$P解释为make变量引用,该引用可能未设置且为空,结果(传递给shell)将为{{1} }。如果你使用WD,那么美元符号会被转义,传递给shell命令的结果将是$$PWD,这就是你想要的。

对于第二行,如果没有与通配符匹配的文件,$PWD函数将扩展为空字符串。因此,wildcard的这个调用正在测试文件wildcard是否存在。如果是,则函数的结果为include/config.mkinclude/config.mk测试为真。如果没有,那么结果将是空字符串,ifeq测试将为false。

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