0

我有这个 Makefile

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

如果我跑

 make -j framework

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

4

1 回答 1

0

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

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

framework:
    @$(MAKE) -C $(HIGGSBASESELECTOR) &
    @$(MAKE) -C $(MATRIX4) &
    @$(MAKE) -C $(SUBSELECTOR) &
    @$(MAKE) -C $(MCSUBSELECTOR) &
    @$(MAKE) -C $(MATRIXSUBSELECTOR) &
    @$(MAKE) -C $(CHECKSUBSELECTOR) &

如果这使您的血液变冷(并且应该),您可以这样做:

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

.PHONY: $(HIGGSBASESELECTOR) $(MATRIX4) $(SUBSELECTOR) ...
$(HIGGSBASESELECTOR) $(MATRIX4) $(SUBSELECTOR) ...:
    @$(MAKE) -C $@
于 2012-09-20T17:55:06.150 回答