我有一組使用gcc和make編譯的C文件。構建過程正常工作。 我想知道如果我可以在編譯期間獲得一個包含所有源代碼但沒有任何預處理器宏的C文件。編譯多個源文件時創建一個C文件
回答
如果包括在gcc編譯器中的所有文件一次,你可以使用
gcc -E main.c other.c another.c
這也將包括可能使用stdlib函數-nostdinc
-E選項正常工作。非常感謝 ! – 2011-05-15 07:35:40
你不能 - 通常你會調用編譯器來編譯一個源文件,產生一個目標文件。稍後,您將調用所有目標文件的鏈接器來創建可執行文件 - 它沒有可用的原始C源代碼。
但是,您可以創建一個單獨的shell腳本,該腳本用於調用gcc的-E
選項僅用於預處理源文件,然後使用cat
實用工具將所有源放入單個文件中。
使用gcc'-E'選項只執行文件的預處理 – CodeButcher 2011-05-12 08:25:18
@CodeButcher:謝謝,更新了我的答案。 – 2011-05-12 08:27:12
您可以使用-save-temps
選項來獲取中間輸出。但是,它將是每個源文件的一個輸出文件。每個源文件分別編譯並表示一個不能混合的編譯單元。
您也可以使用-E
選項,但只能運行預處理器而不能繼續編譯。
一個簡單的做法是製作一個包含所有其他源文件的文件。
$cat *.c > metafile.c
這將構建一個這樣的文件,這取決於你如何設置你「編譯一次」和IFNDEF的這個文件很可能無法編譯自身。
在另一方面,如果你想在一個文件中,所有的預處理器宏的已展開和評估,那麼答案是添加以下的gcc什麼:
-save-temps
然後將該文件。②將包含展開和評估宏
+1,但應該是'> metafile.c',而不是'> metafile.cpp' – 2011-05-12 09:24:00
- 1. 編譯多個源文件
- 2. 在c編譯多個源文件
- 3. 將多個C源文件編譯成一個唯一的目標文件
- 4. AnnotationProcessor使用多個源文件創建一個文件
- 5. MinGW在編譯多源程序文件時是否創建目標文件?
- 6. 使用g ++將多個源文件編譯爲一個.o
- 7. g ++編譯多個文件
- 8. 編譯多個Ocaml文件
- 9. javac編譯多個文件
- 10. Win32資源文件多個譯文
- 11. 編譯多個Typescript文件到一個JavaScript文件
- 12. 編譯多個.jsx文件到一個.js文件
- 13. 編譯一個SASS /羅盤文件分成多個CSS文件
- 14. 將多個文件編譯在一起?
- 15. 可以編譯多個源文件夾到多個目標文件夾
- 16. makefile,編譯源文件列表卡在第一個文件
- 17. 編譯一個.ss文件
- 18. 爲tempdb創建多個DATA文件時創建LOG文件?
- 19. 爲多個文件創建一個msbuild
- 20. 如何將多個目標C文件編譯成一個庫?
- 21. 如何將多個Rust文件編譯到一個C庫中?
- 22. 從java中的一個文本文件創建多個文件
- 23. 在c中創建一個文件和一個文件夾#
- 24. 用.txt文件編譯多個C++文件?
- 25. 在GCC中編譯C文件時出錯(一個文件中有多個文件)
- 26. C++「不命名一個類型」 - 無法編譯源文件
- 27. 編譯多個**在GNU改變**源文件一次讓
- 28. 用C自動創建多個文件
- 29. Dev C++編譯C源文件
- 30. java編譯器創建多少個文件?
爲什麼你需要這個?你想要解決什麼實際問題? – 2011-05-12 11:03:40
我正在嘗試爲C構建一個特定用途的靜態分析器。因此,我想收集一個文件中的所有源以簡化對具有多個文件的複雜項目的分析。 – 2011-05-15 07:38:44