2013-01-24 42 views
1

我正在構建一個使用嵌套Makefiles構建的大型項目(〜3x10^6行代碼)。我有一個文件(subdirs.mk),它爲所有子目錄(可能並行)添加了一些便利規則。它包括以下規則:如何從Make目標中刪除依賴關係定義?

$(SUBDIRS_INCLUDES): 
$(MAKE) -C $(patsubst %-includes,%,[email protected]) includes 

SUBDIRS_INCLUDES := $(patsubst %,%-includes,$(SUBDIRS)) 

includes: $(SUBDIRS_INCLUDES) 

它也提供了類似的規則installcleantest

在我的上一級Makefile中的一個,我有這樣的代碼:

SUBDIRS = dir1 dir2 dir3 
include $(BUILD_TOOLS)/subdirs.mk 

includes: $(BUILD_DIR)/version.h 

我想在這種情況下includes的目標爲只有 make $(BUILD_DIR)/version.h,在所有子目錄中跳過運行包含。不過,我仍然想使用subdirs.mk,因爲它提供了其他有用的功能(前述的testinstall目標)。

有沒有辦法清除includes目標的依賴關係?

回答

3

除了includes之外,爲兩個目標之一使用不同的名稱。 Make沒有'減'或'刪除'依賴的概念。

+0

有道理。當然,我確定爲這些目標使用面向用戶的名稱的基本原理是,使用它們的文件不必定義SUBDIRS以外的任何其他文件。不過,我想我可能會這樣做。 – dbn

0

Irix是來自Silicon Graphics(SGI)的Unix變體,通過提供一個變量來代替所有包含規則的subdirs.mk文件,從而解決了這個問題。然後,在包含subdirs.mk之前,在所有子項makefile中設置此前綴。

雖然吸收很多,但這些文件:commondefscommonrules提供您正在尋找的解決方案。

+0

您注意到這在Irix上可用。它也可以在其他平臺上使用嗎? (我們也建立在Linux,Mac和Windows上)。 – dbn

+0

我提供的鏈接來自於一個開源項目,所以我想你可以把這些文件集成到任何基於make的系統中,只需要很少的修改,如果這就是你所要求的。 – radical7