2016-07-06 73 views
1

我看到下面的GCC命令選項在makefile:

... -MMD -MP -MF "$(@:%.o=%.d)" -MT "$(@:%.o=%.d)" -o "[email protected]" "$<" 

如何解釋呢?

我搜索了makefile文件,但目前還沒有運氣。

(這不只是Automatic Variables

+0

的[什麼是makefile文件的符號$ @ $和<意思?]可能的複製(http://stackoverflow.com/questions/3220277/what-do-the-makefile-symbols-and-mean) – Tim

+1

這不僅僅是自動變量。 – smwikipedia

回答

0

(感謝@昆汀的線索,我只是發現它!)

它被稱爲Substitution Reference

一些報價:

一個取代的參考替代變量與 變化值你指定的。它的形式爲'$(var:a=b)'(或 '${var:a=b}'),其含義是採用變量 var的值,用字符b中的每個a替換該值,並用 代替結果字符串。

當我們說「在一個單詞的結尾」時,我們的意思是必須出現 後跟空白或值的末尾,以便替換爲 ;其他值中的其他值不會改變。對於 例如:

foo := a.o b.o c.o

bar := $(foo:.o=.c)

套「bar」到「a.c b.c c.c」。見Setting Variables

替換參考實際上是使用擴展功能的縮寫(參見Functions for String Substitution and Analysis)。我們提供替代參考以及與其他make實現兼容的 的patsubst。

所以,下面的命令充分詮釋:

... -MMD -MP -MF "$(@:%.o=%.d)" -MT "$(@:%.o=%.d)" -o "[email protected]" "$<" 

是:

使用GCC編譯第一先決條件文件($<),並生成一個名爲後 輸出文件當前規則目標的名稱(%@)。並通過 的方式,生成一個名爲*.d的生成文件,其中包含規則來描述當前規則目標的依賴關係。並將規則目標中的名稱 生成*.d生成文件從*.o更改爲*.d