我正試圖將兩個構建系統粘合在一起。兩者都是遞歸的(makefile中的規則使用make調用其他makefile來構建項目的組件)。如何忽略遞歸構建中的命令行變量賦值?
我會稱它們爲'A'和'B',其中'A'構建應用程序,'B'構建'A'使用的庫。
A中的頂層makefile調用'make TARGET = whatever',這意味着構建的所有遞歸調用位都將TARGET的值作爲只讀變量繼承,包括B的構建系統,它是稱爲遞歸構建的一部分。
我不希望在'B'(來自不同的項目)的構建系統中發生這種情況,因爲那裏的makefiles使用TARGET來實現自己的目的,並且構建失敗,因爲TARGET具有錯誤的值,並且只讀。
我只能看到兩個解決方案,這兩個解決方案都不是palettable;
1)將TARGET重命名爲A中的makefile中的其他內容,並將其設置在A中的makefile中,以避免與構建系統的較低級別發生衝突。
2)在設置了TARGET變量的B中的makefiles中的任何地方使用'override'指令覆蓋它的只讀狀態。
任何人有任何更好的想法? - 理想情況下,我想什麼通過從A在B的構建系統被繼承,但那些選擇我明確地傳遞到B構建系統從A
順便說一句,我使用的GNU讓V3.80。
如果你不想在B的makefile中設置TARGET,那你爲什麼要在A的makefile中傳遞TARGET = any? – JesperE 2009-06-01 14:32:26
A的頂級makefile將TARGET = whatever傳遞給A中的第二級makefile(需要它),然後A中的第二級makefile調用B的makefile,它將TARGET作爲只讀變量從二級製造。 – 2009-06-01 15:04:31