0

私はこのMakefileを持っています

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

私が実行した場合

 make -j framework

1つのプロセスのみを使用します。このMakfileをリファクタリングしてコンパイルをパラライズするための最良の(そして高速な)方法は何ですか?

4

1 に答える 1

0

ルールは$(MAKE)コマンドを順番に実行するため、一度に 1 つのプロセスしか表示されないことは驚くことではありません。

迅速で汚いアプローチ (これらの呼び出しの結果を待っているものが何もない場合) は次のとおりです。

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 に答える