我正在开发一个使用嵌套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,因为它提供了其他有用的功能(前面提到的 test
和 install
目标) .
Is there a way to clear the dependencies from the includes target?
2 回答
除了
includes
之外,为两个目标之一使用不同的名称 . Make没有'subtracting'或'removing'依赖关系的概念 .来自Silicon Graphics(SGI)的Unix变体Irix通过提供一个变量相当于您的subdirs.mk文件来解决这个问题,该变量在所有包含的规则之前开头 . 然后,在包含subdirs.mk之前,在所有子makefile中设置此前缀 .
虽然吸收很多,但这些文件:commondefs和commonrules提供了您正在寻找的解决方案 .