2013-01-24 124 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