你如何告诉Clang CompilerInvocation使用框架?

时间:2017-01-12 04:04:44

标签: c++ clang llvm

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

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

此时,我认为我在CompilerInvocation类的选项子对象中随处可见,而我能识别的与此相关的最接近的是标题搜索路径。我似乎找不到告诉CompilerInvocation寻找特定框架的方法。

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

1 个答案:

答案 0 :(得分:0)

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

当然,这意味着通过CompilerInvocation 的方式存在,因为这是唯一返回的内容。我可以相信,从框架路径获取框架的逻辑是私有的。