2010-10-03 117 views
5

我有一個BSDmakefile和GNUmakefile,除了依賴管理外,它們幾乎完全相同。BSD Make和GNU Make兼容的makefile

的GNUmakefile:

ifneq ($(MAKECMDGOALS), "clean") 
-include $(dependencies) 
endif 

的BSDmakefile:

.for i in $(dependencies) 
.sinclude "${i}" 
.endfor 

有沒有辦法讓這個我可以檢測,如果我下使用gmake或bsdmake運行,然後執行相應的包括基於此的陳述?我記得看到有人利用兩個生成文件處理器中的一個怪癖,以便他們可以實現類似的效果。

或者,如果有比這更好的方法,我想知道! (切換到SCons或CMake不合適!)

謝謝!

+1

我不知道你爲什麼要這樣做:爲什麼不只是需要'gmake'或'bmake'到處?如果你想要可移植,你可以使用'automake'並把細節留給它。很多項目都有足夠的時間來完成一個單一的構建系統,更不用說了。0 – 2010-10-03 23:26:08

回答

8

你可以把你的GNU特定的東西放在GNUmakefile中,你的BSD特定的東西放在BSDmakefile中,而你的常用東西放在一個名爲Makefile.common或類似的文件中。然後在其他兩個的每一個的開始處包括Makefile.common。缺點是,現在你有3個生成文件,而不是2個。上面,你只會編輯1.

+1

你的「缺點」就像是說將10,000個LOC文件分割成邏輯相關的單元有着產生多個源文件的缺點。 – 2010-10-03 23:24:49

+2

@傑克凱利:但確實如此。 :) – 2010-10-04 11:15:15