使用 libclang 作为编译器
我正在开发一个根据规范生成 C 代码的工具。因此,用户需要先自行编译生成的代码,然后再将编译后的代码与其他工具一起使用。我想自动化这个繁琐的过程。我想知道是否可以使用 libclang 直接嵌入编译器,而不是调用进程?
I'm working on a tool that generates C code from a specification. Users thus need to compile themselves the generated code before using the compiled code with another tool. I would like to automate this tedious process. Rather than calling a process, I wonder if it is possible, using libclang, to directly embed the compiler?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
是的,对于某些版本的 clang/llvm 是可能的。您可以从 http 开始://llvm.org/viewvc/llvm-project/cfe/trunk/tools/driver/cc1_main.cpp?revision=126577&view=markup = 这是
clang
的来源二进制本身。它确实调用libclang库,您可以将此代码集成到您的应用程序中。 (实际上,它使用来自内部 clang 和 llvm 库的不稳定 C++ 接口,而不是 libclang 的稳定 C API。)如果您将所有 C 源代码保存在文件中,这就是您所需要的。但如果你想直接通过内存传递源,你应该编写自定义的
SourceManager
并使用CompilerInitation Clang
的setSourceManager()
方法进行设置。Yes, it is possible for some version of clang/llvm. You can start from http://llvm.org/viewvc/llvm-project/cfe/trunk/tools/driver/cc1_main.cpp?revision=126577&view=markup = this is a source of
clang
binary itself. It does invoke alibclanglibrary and you can integrate this code into you application. (Actually, it uses unstable C++ interfaces from internal clang and llvm libraries, not the stable C API of libclang.)If you save all C sources in the file, this is all you need. But if you want to pass sources directly via memory, you should write custom
SourceManager
and set withsetSourceManager()
method ofCompilerInvocation Clang
.