使用 libclang 作为编译器

发布于 2024-11-04 20:07:55 字数 116 浏览 3 评论 0原文

我正在开发一个根据规范生成 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

旧瑾黎汐 2024-11-11 20:07:55

是的,对于某些版本的 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 ClangsetSourceManager() 方法进行设置。

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 a libclang library 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 with setSourceManager() method of CompilerInvocation Clang.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文