2012-01-27 81 views

回答

15

是的。

看看gcc-save-temps選項。

它編譯源文件並將預處理結果保存在.i文件中。 (它還將彙編階段的結果保存到.s文件中)。

gcc -save-temps -c main.cc -o main.o 

會產生main.omain.imain.s

main.i是預處理的結果。

+0

這完美的作品!謝謝! – alesko 2012-01-27 23:39:14

+0

@alesko不客氣! – ouah 2012-01-27 23:40:15

+0

我的基於gcc的編譯器只保存'.s'文件 – Adrian 2017-05-19 22:08:37

5

不,不-E本身,-s-c-E選項被稱爲 「停止」 選項。他們實際上停止了某個特定點的過程,所以你不能繼續下去。

如果你想這樣做,你必須做兩遍,或使用-save-temps來保持在編譯過程中正常刪除的臨時文件的副本。

gcc手冊頁,東西討論-E(略轉述):

如果你只想要一些編譯的階段,你可以使用-x(或文件名後綴)告訴GCC從哪裏開始,以及選項-c,-S或-E之一來說明gcc要停止的地方。請注意,某些組合(例如-x cpp-output -E)會指示gcc根本不做任何事情。 -E表示:在預處理階段後停止;不要運行編譯器。輸出採用預處理源代碼的形式,發送到標準輸出(如果指定了-o,則輸出到輸出文件)。

如果您使用-E選項,除預處理外不做任何操作。

-save-temps的描述:

-save-臨時工

商店通常的 「臨時」 中間文件永久;將它們放在當前目錄中並根據源文件命名它們。

因此,使用-c -save-temps編譯foo.c將產生文件foo.i和foo.s以及foo.o.

即使編譯器現在通常使用集成的預處理器,也會創建預處理的foo.i輸出文件。

+0

感謝您的詳細信息! – alesko 2012-01-27 23:42:04