我开始分析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结构)
提前感谢您的帮助。
马丁
答案 0 :(得分:1)
在make中,你使用两个美元符号($$
)来逃避一个美元符号(这样它不会被make扩展)。因此,如果您编写$PWD
,则make会将$P
解释为make变量引用,该引用可能未设置且为空,结果(传递给shell)将为{{1} }。如果你使用WD
,那么美元符号会被转义,传递给shell命令的结果将是$$PWD
,这就是你想要的。
对于第二行,如果没有与通配符匹配的文件,$PWD
函数将扩展为空字符串。因此,wildcard
的这个调用正在测试文件wildcard
是否存在。如果是,则函数的结果为include/config.mk
,include/config.mk
测试为真。如果没有,那么结果将是空字符串,ifeq
测试将为false。
这里没有比较ifeq
的内容或时间戳或其他任何内容。这纯粹是“这个文件存在吗?”测试