2012-09-20 59 views
0

我有這個Makefile並行外部的Makefile

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

,如果我跑

make -j framework 

它僅使用一個過程。什麼是重構這個Makfile以平行化編譯的最好(也是最快)的方法?

回答

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 [email protected] 
+0

我得到:'Makefile:88:***多個目標模式。 Stop.'在'.PHONY'行 –

+0

我假設'HIGGSBASESELECTOR','MATRIX4'等都是簡單的路徑。他們是什麼? (另外,我假設你知道'''我的意思是其餘的目標目錄,'MCSUBSELECTOR'等等。) – Beta

+0

是的,它們是路徑 –