我想从一个顶级make文件中调用子文件夹中的make文件。
我的top make文件的示例如下所示,其中buildPath
是make脚本中的参数:
.PHONY: testSystem
testSystem:
$(MAKE) all -C $(buildPath)/Test1Build
$(MAKE) all -C $(buildPath)/Test2Build
$(MAKE) all -C $(buildPath)/Test3Build
此解决方案的问题是我必须列出所有子文件夹; Test1Build,Test2Build,Test3Build等。
是否有一种方法(使用make)来定义此规则,以便递归地找到收据中的子文件夹而不必全部列出它们? ......或者我可以用完全不同的方式解决这个问题吗?
所有子文件夹均以Test
开头,以Build
作为模式结束。
答案 0 :(得分:1)
根本不难。一个简单的方法:
testSystem:
for d in $(buildPath)/*/.; do \
$(MAKE) all -C $$d; \
done
然而,这有很多问题。这将是更加可靠和强大的:
subdirs := $(wildcard $(buildPath)/*/.)
testSystem: $(subdirs)
$(subdirs):
$(MAKE) -C $@ all
.PHONY: testSystem $(subdirs)
一个警告:如果您使用并行make(-j
),那么如果子目录的结果相互依赖,则可能会遇到第二个解决方案的问题。如果他们这样做,那么您必须在makefile中声明这些依赖关系:
$(buildPath)/foo/. : $(buildPath)/bar/.
等