如何制作干净的clang前端?

Posted

技术标签:

【中文标题】如何制作干净的clang前端?【英文标题】:How to make a clean clang front-end? 【发布时间】:2011-12-25 03:23:23 【问题描述】:

我正在开发一个 C++ 源代码分析器项目,看来 clang 是一个不错的候选者 解析工作。问题是clang严重依赖基础设施“llvm”项目, 如何配置它以获得干净的前端,而无需任何面向具体机器的后端? 就像 LCC 一样,它们为专注于解析器部分的人提供了一个“空”后端。 任何建议表示赞赏。

【问题讨论】:

除了一些支持库(提供一些实用程序类和独立于操作系统的代码)之外,您不需要完整的 LLVM。你在使用哪些 Clang 库? 你知道libclang 吗?它是一个可以公开 Clang AST 的 C 库(具有保证的稳定接口)。它要轻得多。否则,您可以简单地使用 C++ 库(请注意接口不稳定),我认为可执行文件会嵌入对您没有用处的内容。 如果你想结帐libclang,你可能想结帐this presentation 你找到办法了吗??如果是的话,你是怎么做到的,请告诉我现在处于类似的情况...... 可能离题,可能有帮助:查看文本编辑器 Sublime Text 的 SublimeClang 插件的来源。对我来说真的很好用。 【参考方案1】:

我最近在 Windows 上做了这个。

从here下载clang和llvm源代码。

安装 cmake 和 Python(与文档相反,您确实需要 Python 来构建 clang;至少,如果 cmake 找不到 Python 运行时,它会放弃)。

您还需要 VS2008 或 VS2010。

有一点不太明显是需要的目录结构:

projectRoot
    build  <- intermediate build files and DLLs, etc. will go here
    llvm  <- contents of llvm-3.0.src from llvm-3.0.tar go here
        tools
            clang  <- contents of clang-3.0.src from clang-3.0.tar go here

并从第 4 步开始按照windows build instructions 进行操作。不要尝试使用 cmake GUI,这很可怕;只需使用构建说明中给出的命令即可。

构建完成后(需要一段时间),您将拥有:

projectRoot
    build
        bin
            Release  <- libclang.dll will be here
        lib
            Release  <- libclang.lib will be here
    llvm
        tools
            clang
                include
                    clang-c  <- Index.h is here

Index.h 定义了访问源代码信息的 API;它包含大量有关 API 的文档。

要开始使用 clang,您需要以下内容:

CXIndex index = clang_createIndex(1, 1);

// Support Microsoft extensions
char *args[] = "-fms-extensions";

CXTranslationUnit tu = clang_parseTranslationUnit(index, "mySource.c", args, ARRAY_SIZE(args), 0, 0, 0);

if (tu)

    CXCursor cursor = clang_getTranslationUnitCursor(tu);

    // Use the cursor functions to navigate through the AST

【讨论】:

谢谢arx!我正在尝试你的方法。【参考方案2】:

不幸的是,如果没有特定于机器的详细信息,您将无法获得“纯”前端。 C/C++ 本质上是与机器相关的语言。考虑预处理器和内置定义,内置类型的大小等。其中一些可以抽象出来,但不能抽象出来。预处理器。

【讨论】:

以上是关于如何制作干净的clang前端?的主要内容,如果未能解决你的问题,请参考以下文章

WooCommerce 如何在前端获取产品属性的干净标签

clang:错误:不能同时指定“-fobjc-arc”和“-fobjc-gc”

如何构建干净的 microsoft/vscode 源代码树?

Clang前端源码分析

为多个Xarray图制作带有固定颜色条的干净高质量GIF

如何以干净且可维护的方式编写非常复杂的 SQL? [关闭]