繁体   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