我看到下面的GCC命令選項在makefile:
... -MMD -MP -MF "$(@:%.o=%.d)" -MT "$(@:%.o=%.d)" -o "[email protected]" "$<"
如何解釋呢?
我搜索了makefile文件,但目前還沒有運氣。
(這不只是Automatic Variables)
我看到下面的GCC命令選項在makefile:
... -MMD -MP -MF "$(@:%.o=%.d)" -MT "$(@:%.o=%.d)" -o "[email protected]" "$<"
如何解釋呢?
我搜索了makefile文件,但目前還沒有運氣。
(這不只是Automatic Variables)
$(:=)
執行string replacement。
[email protected]
是the name of the file being generated(目標)。
所以$(@:%.o=%.d)
是該文件的名稱,.o
擴展名更改爲.d
。
該命令行爲每個.o
文件生成一個.d
相關性文件。
我從未想到'()'可以與'$ @'交錯。 – smwikipedia
@smwikipedia Make沒有最漂亮的語法,我會給你:p – Quentin
(感謝@昆汀的線索,我只是發現它!)
一些報價:
一個取代的參考替代變量與 變化值你指定的。它的形式爲'
$(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
。
的[什麼是makefile文件的符號$ @ $和<意思?]可能的複製(http://stackoverflow.com/questions/3220277/what-do-the-makefile-symbols-and-mean) – Tim
這不僅僅是自動變量。 – smwikipedia