1

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

$(SUBDIRS_INCLUDES):
$(MAKE) -C $(patsubst %-includes,%,$@) includes

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

includes: $(SUBDIRS_INCLUDES)

它还为install, clean,test等提供了类似的规则。

在我的上层 Makefile 之一中,我有以下代码:

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

includes: $(BUILD_DIR)/version.h

includes在这种情况下,我希望目标生成 $(BUILD_DIR)/version.h,跳过运行包含在所有子目录中。但是,我还是想使用 subdirs.mk,因为它提供了其他有用的功能(前面提到的testinstall目标)。

有没有办法清除includes目标的依赖关系?

4

2 回答 2

3

includes对两个目标之一使用不同的名称。Make 没有“减去”或“删除”依赖项的概念。

于 2013-01-24T21:31:31.733 回答
0

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

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

于 2013-01-24T23:06:14.817 回答