makefile中,一條規則的命令結束的標誌

標題可能無法表達出我的疑惑。在我們寫makefile的時候,每一個規則都有對應的命令,那麼,make怎麼知道規則的最後一條命令是什麼呢?一條規則的命令到哪裏結束?如果不搞清楚,可能就會對閱讀甚至編寫make產生誤解。

例如正常的規則編寫應該是這樣的:


如果目標下空了一行,如下圖:


按我之前的理解,此時的echo命令並不歸屬於test規則【這是錯誤的理解!】,然而在我看大神的makefile的時候,卻驚訝地發現是允許在目標與命令之間空行的。這是非常簡單的情況,如果之間再摻雜了if\ifndef\define等等又會怎麼樣呢?就簡單來說,make如何解析一個規則的命令的結束?

由於在網上找不到資料,而我學習的文檔《跟我一起學makefile-陳皓》裏又沒講清楚,因此以下僅僅是我的測試結果。由於精力與見識有限,不可能測試完整,或完全測試正確,若有錯誤地地方,或者你們能找到解答我疑惑的文章,務必告訴我,讓我們一起進步。

======================================================================================

測試結論:

1、空行、ifeq、define、ifndef等並不識別爲命令集的結束

2、新的目標或者變量定義會識別爲命令集的結束

簡言之:

一條規則的命令會一直向下搜索,直到遇到非命令相關的部分(例如目標,變量定義等)【命令相關的部分包括條件判斷,命令包】

=======================================================================================

測試1:


結論1:命令會一直向下執行,而ifdef\ifeq是對命令是否執行的選擇,define是對命令的封裝,均屬於命令類,因此會一直執行到TEST:=string_again


測試2:


結論2:由於第一個目標的命令遇到TEST變量的定義而結束了,因此24行的命令爲非法命令,導致make無法執行


此博客爲本人學習makefile中的部分學習思考,由於還在學習積累中,難免會有些幼稚與錯誤,希望指正

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章