Makefile 并行化外部生成文件

Makefile 并行化外部生成文件,makefile,multiple-makefiles,Makefile,Multiple Makefiles,我有这个Makefile framework: @$(MAKE) -C $(HIGGSBASESELECTOR) @$(MAKE) -C $(MATRIX4) @$(MAKE) -C $(SUBSELECTOR) @$(MAKE) -C $(MCSUBSELECTOR) @$(MAKE) -C $(MATRIXSUBSELECTOR) @$(MAKE) -C $(CHECKSUBSELECTOR) ... 如果我跑 make -j f

我有这个Makefile

framework:
    @$(MAKE) -C $(HIGGSBASESELECTOR) 
    @$(MAKE) -C $(MATRIX4)
    @$(MAKE) -C $(SUBSELECTOR)
    @$(MAKE) -C $(MCSUBSELECTOR)
    @$(MAKE) -C $(MATRIXSUBSELECTOR)
    @$(MAKE) -C $(CHECKSUBSELECTOR)
    ...
如果我跑

 make -j framework

它只使用一个进程。重构此Makfile以并行编译的最佳(快速)方法是什么?

您的规则按顺序执行
$(MAKE)
命令,因此一次只看到一个进程也就不足为奇了

一种快速而肮脏的方法(如果没有任何东西等待这些调用的结果)是

如果这让你的血液变得冰冷(应该如此),你可以这样做:

framework: $(HIGGSBASESELECTOR) $(MATRIX4) $(SUBSELECTOR) ...
    do things after the calls

.PHONY: $(HIGGSBASESELECTOR) $(MATRIX4) $(SUBSELECTOR) ...
$(HIGGSBASESELECTOR) $(MATRIX4) $(SUBSELECTOR) ...:
    @$(MAKE) -C $@

我得到:
Makefile:88:**多个目标模式。停止。
.PHONY
线路上,我假设
HiggbaseSelector
MATRIX4
等都是简单的路径。它们是什么?(另外,我假设您知道,
..
指的是剩余的目标目录,
MCSUBSELECTOR
等等。)您能给出一个产生错误的路径示例吗?另外,您使用的Make版本是什么?
framework: $(HIGGSBASESELECTOR) $(MATRIX4) $(SUBSELECTOR) ...
    do things after the calls

.PHONY: $(HIGGSBASESELECTOR) $(MATRIX4) $(SUBSELECTOR) ...
$(HIGGSBASESELECTOR) $(MATRIX4) $(SUBSELECTOR) ...:
    @$(MAKE) -C $@