回答
是的。
看看gcc
-save-temps
選項。
它編譯源文件並將預處理結果保存在.i
文件中。 (它還將彙編階段的結果保存到.s
文件中)。
gcc -save-temps -c main.cc -o main.o
會產生main.o
也main.i
和main.s
。
main.i
是預處理的結果。
不,不-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輸出文件。
感謝您的詳細信息! – alesko 2012-01-27 23:42:04
- 1. GCC預處理器
- 2. Xcode預處理器輸出
- 3. gcc編譯器在Cygwin輸出.exe
- 4. 編輯預編譯的通用處理程序的輸出.ashx
- 5. C預處理器與C編譯器
- 6. C#編譯器:預處理只有
- 7. OpenCL編譯器預處理定義?
- 8. C++「編譯器」與預處理
- 9. MSVC++預處理器 - 如何用編譯器宏輸出定義值?
- 10. 先前編譯預處理文件改變輸出
- 11. GCC ARM彙編預處理宏
- 12. CMake,Qt,gcc和預編譯頭文件
- 13. GCC -E -dM給我的預處理器定義,但我希望它編譯
- 14. 預處理器輸出字段
- 15. C,Objective-C的預處理器輸出
- 16. GCC轉儲預處理器定義
- 17. GCC中的PRIuPTR預處理器錯誤?
- 18. GCC預處理器內聯函數名
- 19. 爲GCC運行「輕」預處理器
- 20. 自定義gcc預處理器
- 21. 預處理後gcc可以輸出C代碼嗎?
- 22. 編譯編譯器錯誤編譯GCC
- 23. gcc -funit一次導致編譯失敗
- 24. gcc C預處理器可以使用shell命令的輸出嗎?
- 25. gcc預處理器輸出中以「#1」a.c「'開頭的行是什麼意思?
- 26. 打字稿編譯器API,輸出文件並處理錯誤
- 27. 是否存在處理預處理器指令並給出實際預處理器輸出的工具?
- 28. 編譯器(GCC)如何處理C++的訪問控制?
- 29. gcc彙編輸出
- 30. 預處理宏GCC:粘貼X和X沒有給出一個有效的預處理標記
這完美的作品!謝謝! – alesko 2012-01-27 23:39:14
@alesko不客氣! – ouah 2012-01-27 23:40:15
我的基於gcc的編譯器只保存'.s'文件 – Adrian 2017-05-19 22:08:37