Makefile 并行

Makefile 并行,makefile,gnu-make,Makefile,Gnu Make,在此项目中,顶级规则如下所示: all: for l in $(LIBDIRS); do $(MAKE) -C $$l all; done 如果我运行make-jx,每个目录中的文件都是并行编译的,但是由于这个bash循环,make不会移动到下一个库中的文件,直到在当前库中完成所有操作。改变循环的最佳方式是什么,以便它真正能够并行执行?我只使用gnumake,所以gnu扩展就可以了 *编辑*顺便说一句,我试过这样的方法 ALL_DEPENDENCY = $(foreach l,

在此项目中,顶级规则如下所示:

all:
        for l in $(LIBDIRS); do $(MAKE) -C $$l all; done
如果我运行
make-jx
,每个目录中的文件都是并行编译的,但是由于这个bash循环,make不会移动到下一个库中的文件,直到在当前库中完成所有操作。改变循环的最佳方式是什么,以便它真正能够并行执行?我只使用gnumake,所以gnu扩展就可以了

*编辑*顺便说一句,我试过这样的方法

ALL_DEPENDENCY = $(foreach l, $(LIBDIRS), $(l).PHONY_LIB_RULE)
.PHONY: $(ALL_DEPENDENCY)
%.PHONY_LIB_RULE:
        $(MAKE) --no-print-directory -C $(patsubst %.PHONY_LIB_RULE,%,$@) all

all: $(ALL_DEPENDENCY)

但是这些规则并没有被打乱。

你可以检查这个答案,以了解如何更正确地做这件事的示例:

我看了你的答案,你建议的第二件事似乎是我已经尝试过的(参见我的编辑),所以我显然有些微妙的错误。你看到它是什么了吗?事实上,我刚刚摆脱了虚假的LIB_规则,并准确地使用了你的解决方案,这是有效的。谢谢