2014-01-13 49 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