我有一个可执行文件,它包含多个目录中的许多.c源文件。 目前我需要对整个源代码运行静态分析,而不是分别对每个文件进行静态分析。
我刚发现gccʟᴛᴏ(链接时间优化)通过压缩镜像预处理源的gimple来工作。
此外,当编译器在ʟᴛᴏ链接阶段崩溃时,它会要求发送错误报告的预处理源。
通过合并源文件,我的意思是将用于创建可执行文件的所有文件合并到一个文件中。编译和链接该单个文件将创建库,从而导致手动执行操作。 (但这不是目的。静态分析仪不支持ɪᴘᴏ/ things)
手动执行此操作肯定需要数小时......
那么,有没有办法自动合并 C 源文件?或者至少获得ʟᴛᴏ预处理来源? (似乎save-temps
选项在与ʟᴛᴏ连接时没有任何意义
答案 0 :(得分:2)
CIL(C中间语言)有一个'合并'功能,我已成功用于一些简单的合并操作。
我用它来合并中等复杂的程序 - 大约一百个不同文件夹中的文件。当然,如果您的代码库包含任何C ++,则CIL合并将无法合并。
答案 1 :(得分:0)
不,因为例如两个文件可能存在冲突的static
声明。将源代码移动到单个文件中的其他方法可能会使其停止工作,并且诊断每个可能的源代码都需要解决停机问题。 (如果两个代码段在同一个文件中,那么任意程序是否会以__FILE__
的结果使用它失败?)文件范围声明最有可能发生在现实世界中,尽管
也就是说,您可以尝试连接文件并查看您收到的错误消息。如果你#include
两次,大多数标题应该继续有效。可以通过原始文件中的搜索和替换来修复冲突的标识符名称。