2015-10-22 56 views
0

我在我的Makefile學習冒險中遇到了一些小問題。 我準備了兩個腳本。第一個是主的Makefile在包含文件中定義之前使用Makefile變量

all: 
     @echo $(COMPONENTNAME) 

include ~/Projects/tests/mk 

而這裏的MK文件

COMPONENTNAME:=ISeeYou 

現在,當我運行

make all 

我得到

ISeeYou 

我不知道爲什麼......我確信變量必須在使用之前定義。包含在正在使用COMPONENTNAME之後。我懷疑所有包含都是先完成的,然後創建目標。是這樣嗎?

回答

1

我懷疑所有包含都是先完成,然後開始創建目標。

是的,你說得對。

在Make能夠決定應該構建哪個目標(以及以何種順序)之前,Makefile中的所有全局部分都應該被完全解析。 Target的配方只有在需要建立目標時纔會被評估。這在make manual中明確陳述:

make process recipe的另一種方式是通過展開其中的任何變量引用。這發生在make完成讀取所有makefile並且確定目標已過期之後;所以,不重建目標的食譜不會擴大。

相關問題