2014-02-07 45 views
1

正如標題所示,我怎樣才能防止製造中的競爭狀況?如何防止製造中的競爭狀況?

我的具體使用情況是,我想clean然後建立all目標:

make -j 4 clean all 

我應該放棄,並滿足於make clean && make -j 4 all

+0

這是重複http://stackoverflow.com/questions/2121620/parallel-building-with-gnumake-and-prerequisites? –

回答

1

我認爲,使這項工作的唯一方法就是把這個在Makefile

all : clean 

你不想(顯然)。我的下一個想法是:

clean_all: clean 
    $(MAKE) all 

這將使你寫make -j clean_all但我不喜歡它,無論是。

+1

可能'rebuild_all'聽起來好多了...... –

+0

不幸的是,我認爲這是唯一的方法。儘管我的目的不是真的可以接受。看起來我只是堅持'make clean && make all'! – vmrob

+1

'rebuild_all:all |乾淨'應該做你想做的事 – Kurt

2

你不能真正並行執行一個構建目標的配方和另一個銷燬它的配方。

你有什麼用例記住,不會滿足於:

make clean && make -j4 

+0

我認爲這個問題在實際應用中聽起來很棒,但'make clean && make -j4'比'make -j4 clean all'長4個字符。你的問題的答案是,我發現這個解決方案是完全可以接受的,但是如果有另外一種方法可以實現,我想知道。一個不同的用例可能很重要,如果我必須傳遞冗長的參數給make命令的話。在這種情況下,將命令大小減半會吸引我。 – vmrob

+0

與我剛剛說的相關的另一個原因是當我需要從不同的目錄構建時。我經常使用'make -C some/path/to/dir'。 – vmrob

+0

@vmrob我明白了。另一方面,你的構建是一個按鍵過程是非常重要的。在DE中,您可以指定一次構建命令並使用一個鍵多次構建它。在shell中,您可以使用命令歷史來重複以前的任何命令。儘管如此,如果讓GNU能夠說某個目標不能與其他目標並行建立,那將是非常好的。 –