2017-05-31 71 views
0

所以我我已經下載的gcc-7.1.0源從GCC FTP服務器歸檔和我這樣的配置吧:gcc是什麼使進程在做什麼?

../configure --enable-languages=c --disable-multilib 

由於子目錄是在那裏我已經提取的來源。當前目錄名爲'objdir'。

現在,如果我以後像運行make -j 2 5分鐘開始,現在像1〜2時,我只是修改項目單一來源文件 - 在CC1這基本上是我們所編制創建/更新objdir/gcc約110MB總大小 - 一個完全有效的驅動程序,我可以使用/調試等。但之後像3或4秒這個文件被移動到objdir/prev-gcc,然後我等待不超過20分鐘。

我想我會在創建prev-gcc目錄並繼續處理其中的內容後繼續查殺make過程,但我想知道這個怪癖的原因是什麼。就像make過程將完全正在運行的編譯二進制文件移動到objdir/prev-gcc然後繼續做一些看起來非常非常(我記得等待整天完成一次)的原因是什麼,或者我在這裏忽略了一些明顯的東西。

+1

運行'make -j2 bootstrap'並且不要中斷/終止進程。這個編譯器分三個階段構建 - 第一個使用引導編譯器構建GCC;第二個使用剛剛構建的GCC再次構建GCC;第三次再次建立GCC,確保結果是一樣的。在MacBook Pro上(2016年15月15日),我使用'make -j8 bootstrap',並且整個過程(3個階段)花費了一個多小時。這與SSD而不是旋轉磁盤完全不同。你是否有能力使用'-j4'或'-j8'? –

+1

另請注意[安裝說明](https://gcc.gnu.org/install/configure.html):_First ,我們強烈建議將GCC構建到不在源代碼樹內的源代碼的獨立目錄中,這就是我們通常構建GCC的方法;構建srcdir == objdir仍然可以工作的地方,但是沒有得到廣泛的測試; objdir是srcdir的子目錄不受支持._您正在使用_objdir_作爲_srcdir_的子目錄 - 根據文檔,您的構建不受支持。 –

+0

在'.../gcc-7.1.0'中創建源代碼,我創建'.../gcc-7.1.0-obj',然後使用'cd .../gcc-7.1.0-obj; ../gcc-7.1.0/configure ...'和'make -j8 bootstrap'。 –

回答

2

如果要禁用正常的gcc 3級引導進程(重新編譯自身的測試程序),請使用--disable-bootstrap作爲配置選項。這會將Makefile配置爲只構建一次gcc。

至於什麼默認(引導)過程是這樣做的:

與系統編譯
  • 編譯GCC創建「階段1」的編譯器
  • 重新編譯所有與階段1編譯器生成的階段2編譯
  • 使用stage2編譯器重新編譯所有內容以生成stage3編譯器
  • 比較stage2和stage3編譯器(二進制文件)以確保它們完全相同。

如果最後一次檢查失敗,則構建過程出現問題。