Skip to content

伪编译

WARNING

此功能尚在计划中,尚未实现。

概念

伪编译不将编译任务转发给真正的编译器,而是由 catter 生成占位的 .o 文件。这样构建系统可以完成完整的运行流程(包括链接步骤),而无需实际编译。

带来的好处:

  • 在极短时间内获得完整的 CDB。 不执行真正的编译工作,构建速度仅受构建系统调度能力的限制。
  • 完整的链接器命令捕获。 由于占位目标文件存在于磁盘上,链接器调用可以正常进行并被拦截。

智能依赖分析

并非所有命令都可以伪造。代码生成器(如 LLVM TableGen)必须真正执行构建,因为它们生成的头文件是其他编译步骤的输入。

Catter 将通过依赖分析区分以下两类:

  • 常规编译 -- 可以伪造。输出的 .o 文件仅被链接器消费。
  • 代码生成器 -- 必须真正构建。其输出(生成的头文件、源文件)是其他编译步骤所需的输入。

这实现了"最小构建":仅构建 CDB 生成和头文件产出所严格需要的部分,其余全部伪造。