如何从Make目标中删除依赖项定义?

时间:2013-01-24 21:10:33

标签: makefile dependencies

我正在开发一个使用嵌套Makefile构建的大型项目(~3x10 ^ 6行代码)。我有一个文件(subdirs.mk),它为所有子目录(可能并行)添加了一些便利规则。它包括以下规则:

$(SUBDIRS_INCLUDES):
$(MAKE) -C $(patsubst %-includes,%,$@) 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目标的依赖关系?

2 个答案:

答案 0 :(得分:3)

includes之外,为两个目标之一使用其他名称。 Make没有“减去”或“删除”依赖关系的概念。

答案 1 :(得分:0)

来自Silicon Graphics(SGI)的Unix变体Irix通过提供一个变量相当于您的subdirs.mk文件解决了这个问题,该变量在所有包含的规则前面。然后,在包含subdirs.mk之前,在所有子makefile中设置此前缀。

虽然吸收很多,但这些文件:commondefscommonrules提供了您正在寻找的解决方案。