簡體   English   中英

如何自動合並C源文件?

[英]How to automatically merge C source files?

我有一個可執行文件,它由多個目錄中的許多 .c 源文件組成。 目前我需要對整個源代碼運行靜態分析,而不是單獨對每個文件進行分析。

我剛剛發現 gcc ʟᴛᴏ(鏈接時間優化)通過壓縮鏡像預處理源的 gimple 起作用。
此外,當編譯器在 ʟᴛᴏ 鏈接階段崩潰時,它會要求發送錯誤報告的預處理源。

通過合並源文件,我的意思是將用於創建可執行文件的所有文件合並到一個文件中。 編譯和鏈接該單個文件將創建庫,從而手動執行 ʟᴛᴏ 所做的工作。 (但這不是這里的目標。靜態分析器不支持 ɪᴘᴏ/ʟᴛᴏ)
手動執行此操作肯定需要幾個小時......

那么,有沒有辦法自動合並C源文件? 或者至少獲得 ʟᴛᴏ 預處理源? (似乎save-temps選項在與 ʟᴛᴏ 鏈接期間沒有任何有趣的事情)

CIL (C 中間語言)具有“合並”功能,我已成功將其用於一些簡單的合並操作。

我用它來合並中等復雜的程序 - 不同文件夾中的大約一百個文件。 當然,如果您的代碼庫包含任何 C++,則 CIL 合並將無法合並它。

不,因為例如兩個文件可能有沖突的static聲明。 還有其他方法可以將源代碼移動到單個文件中可能會使其停止工作,並且診斷每個可能的問題需要解決停機問題。 (任意程序是否曾經使用__FILE__的結果,如果兩段代碼在同一個文件中,它會失敗?)不過,文件范圍聲明最有可能發生在現實世界中。

也就是說,您可以嘗試連接文件並查看您收到的錯誤消息。 如果您將它們#include兩次,大多數標題應該繼續工作。 沖突的標識符名稱可以通過在原始文件中搜索和替換來修復。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM