回答
是的。
看看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. 有沒有辦法爲編譯的子集啓用gcc預處理器輸出?
- 3. GCC預處理器
- 4. g ++預處理器輸出
- 5. Xcode預處理器輸出
- 6. gcc編譯器在Cygwin輸出.exe
- 7. gcc的預處理器和粘貼
- 8. 編輯預編譯的通用處理程序的輸出.ashx
- 9. C預處理器與C編譯器
- 10. 如何更改GCC預處理器輸出格式?
- 11. C++「編譯器」與預處理
- 12. OpenCL編譯器預處理定義?
- 13. C#編譯器:預處理只有
- 14. MSVC++預處理器 - 如何用編譯器宏輸出定義值?
- 15. 如何輸出預處理的代碼並編譯它(Visual Studio)
- 16. 先前編譯預處理文件改變輸出
- 17. GCC ARM彙編預處理宏
- 18. CMake,Qt,gcc和預編譯頭文件
- 19. 如何區分預處理器和編譯器指令?
- 20. Xcode JIT編譯器忽略一些預處理器宏
- 21. 我可以讓C++預處理器在編譯期間發送輸出嗎?
- 22. GCC -E -dM給我的預處理器定義,但我希望它編譯
- 23. IBM s390 C預處理器的輸出?
- 24. C,Objective-C的預處理器輸出
- 25. 預處理器輸出字段
- 26. 自定義gcc預處理器
- 27. GCC中的PRIuPTR預處理器錯誤?
- 28. GCC轉儲預處理器定義
- 29. GCC預處理器內聯函數名
- 30. GCC預處理器刪除註釋
這完美的作品!謝謝! – alesko 2012-01-27 23:39:14
@alesko不客氣! – ouah 2012-01-27 23:40:15
我的基於gcc的編譯器只保存'.s'文件 – Adrian 2017-05-19 22:08:37