2012-07-20 56 views
0

在我Fedora15的盒子,我可以寫Makefile文件是這樣的:Makefile變量賦值:'include'不允許作爲變量嗎?

app = MyApplication 
deps = `pkg-config ...` 

這工作完全正常。然而,每當我嘗試在Debian機器上執行這樣的Makefiles時,顯然由於'='周圍的空白而出現錯誤。所以重寫他們是這樣的:

app=MyApplication 
deps=`pkg-config ...` 

修復它。現在我的問題是,這種不兼容性是如何引起的?我的Fedora版本是3.82,而我的Debian版本是3.81。搜索化妝的更新日誌沒有發現任何變化這將使這一切成爲可能要麼..

編輯:

我似乎已經找到了這種怪異的行爲的原因:在大多數我的makefile,我通常使用變量「include」來保存所有的pkg-config輸出。現在顯然「包括」是某種關鍵字,當被使用這樣在Debian

include="stuff" 

觸發宏,尋找路徑或東西。如果我如上所示使用它,我可以將其用作普通變量。但現在有趣的部分是:我可以總是使用'include'作爲Fedora上的變量名!因此,像這樣的臺詞:

include = `pkg-config --blah` 

完美工作的Fedora下,但始終未能在Debian下吐出的臺詞「的Makefile:2:=:沒有這樣的文件或目錄」(這是expetcing「=」號和其他一切顯然是路徑)

現在我的問題仍然存在,但是爲什麼我可以在Fedora上做這樣的事情(爲什麼'包含宏似乎沒有定義在那裏),但不是在Debian上?

+0

我正在運行Debian(使版本3.81-8.2),並且我對變量周圍的空格沒有任何問題。 – 2012-07-20 23:00:21

+0

@Nicolás嗯,我在兩臺Debian機器上試了這個,一臺在工作,另一臺在RaspberryPi上,它總是出現故障.. – Ancurio 2012-07-21 01:04:34

+0

奇怪。文檔中明確指出空白空間應該被忽略,請參閱[設置變量](http://www.gnu.org/software/make/manual/html_node/Setting。HTML#設置)。在Linux上,'make'使用宏'isblank()'來檢測這些空格,而空格又使用語言環境設置。您的區域設置應將空白定義爲「」或「」。您的語言環境可能有問題?你會得到什麼錯誤? – 2012-07-21 11:57:59

回答

1

現在我的問題仍然矗立但是爲什麼我可以在Fedora的 做這樣的事情(爲什麼「包括宏似乎並不其中所述),但不是在 Debian的?

不同的行爲不是由Linux的分佈差異造成的,而是由這些分佈中make版本的差異造成的。如果在include之後,=(或任何其他賦值風格)之前有空格,3.81將錯誤地將其解析爲include指令。

對於其他指令也是如此,例如vpath。在3.81中,如果在=之前有一個空格,則不會定義名爲vpath的變量值,但不會定義變量vpath。在3.82中,這是固定的 - 如果你想這樣稱呼:-)我寧願make在任何情況下抱怨這些變量名稱。