2014-01-13 32 views
1

我开始分析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.避免在同一个问题中发布多个查询。 2.'$$'用于引用_shell_变量,'$'用于引用_make_变量。 3.通配符似乎是多余的。 – devnull

回答

1

在做什么,你逃脱一个美元符号使用两个美元符号(所以它不是由化妆扩大)($$)。因此,如果你编写$PWD,那么make会将$P解释为一个make变量引用,该引用可能未被设置并且如此空,并且结果(传递给shell)将为WD。如果你使用$$PWD那么美元符号会被转义,并且传递给shell命令的结果将是$PWD这正是你想要的。

对于第二行,如果没有匹配通配符的文件,wildcard函数将扩展为空字符串。因此,wildcard的这个调用正在测试以查看文件include/config.mk是否存在。如果确实如此,则函数的结果将为include/config.mk,并且ifeq测试将为真。如果不是,那么结果将是空字符串,并且ifeq测试将是错误的。

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

+0

感谢您的回答。我懂了。 – martin