2012-04-05 172 views
0

我正在使用GCC 4.7並編譯我的C++代碼項目。代碼由分佈在目錄中的文件組成。makefile:如何快速編譯

在我使用的RHEL服務器上,有16個內核,但編譯速度仍然很慢。你能否提出可能的替代方案或makefile的選項,這可能有助於快速編譯。我已經嘗試過-j,但它只編譯一些文件夾並停止;不會編譯主要的二進制文件。

我將不勝感激任何幫助。

回答

5

如果在使用-j進行編譯時,如果makefile文件失敗,但沒有正常工作,那麼您可能需要修復makefile才能在並行編譯中正常工作。否則,那些其他15個內核對你來說沒有用處。

它的情況並不少見缺乏經驗的makefile作家寫的東西,如:

final: step1 step2 step3 

意味着「建立決賽中,第一個構建第一步,然後第二步,第三步則」。當您使用-j 1的默認設置運行時,此工作正常,因爲make恰好按照從左到右的順序構建每個依賴項。但是如果你使用-j 20(比如說),那麼它會嘗試並行地構建它們。它將嘗試立即開始構建所有3個步驟,而不必先等到每個連續步驟完成。

寫這個正確的方法是:

final: step3 
step3: step2 
step2: step1 

這告訴make究竟發生了什麼:打造final首先需要建立step3,在您需要step2,爲此,你需要step1