你如何告诉 Clang 编译器调用使用框架

How do you tell a Clang CompilerInvocation to use a framework?

本文关键字:框架 调用 编译器 何告诉 Clang      更新时间:2023-10-16

我有使用 Clang 静态库构建CompilerInvocation的代码。我想告诉该调用使用特定的框架,就像使用 -framework Clang 前端选项一样。特别是,我正在寻找使用框架的这些"副作用":

  • 编译器使用框架搜索路径在系统上定位框架;
  • 编译器知道在哪里可以找到通过 <Framework/Header.h> 等路径标识的框架标头。

这一点上,我认为我已经在 CompilerInvocation 类的选项子对象中查找了所有内容,我可以识别的最接近的与此相关的内容是标题搜索路径。我似乎找不到一种方法来告诉CompilerInvocation寻找特定的框架。

这应该如何发生?我使用的是手动构建的CompilerInvocation而不是通过命令行参数构建它,因为这似乎是将内存缓冲区作为源单元而不是文件传递的唯一方法。

我还没有找到通过 CompilerInvocation 对象执行此操作的方法,但是您可以使用 clang:: createInvocationFromCommandLine 从命令行参数中获取CompilerInvocation。使用 -framework 参数时,生成的调用可以正确#include框架标头。这不是很好,但它有效(除了编译器会抱怨框架是未使用的链接器输入,可能是因为没有发生链接阶段)。

当然,这意味着必须存在一条通过CompilerInvocation的方法,因为这是唯一返回的东西。不过,我可以相信从框架路径获取框架的逻辑是私有的。