View on GitHub

开源开发工具技术博客

编译器/工具链、模拟器、虚拟机、Linux内核、调试和性能分析工具

 

为你的程序选择正确的接口

 

Clang为实现需要一个程序的语法和语义信息的工具提供了基础设施。((译者注:为了便于理解,再意译一句)如果你想实现一个工具,而这个工具需要获取 一个程序的语法和语义信息,那么恭喜你,Clang可以为你提供一些基础实现。)这个文档将给出使用不同的方法去实现基于Clang的工具的一个简短介 绍,包括它们的优点和缺点。

LibClang

LibClang是一个稳定的高层次的Clang的C语言接口。如果不确定LibClang是你想要用的接口,只有当你有一个好的理由不用LibClang的时候,这个时候你才可以去用别的接口。

如果遇到如下情况,那么就是典型的使用LibClang的时候:(译者注:Xcode目前没搞清楚,暂时保留):

如果遇到下列情况,请使用LibClang:

如果遇到下列情况,请不要使用LibClang:

 

Clang Plugins

 

Clang Plugins允许你在AST之上运行一些额外的动作,而这些动作作为编译的一部分。Plugins是运行的时候被编译器加载的动态库,她们很容易合并到你的构建环境中。

如果遇到如下情况,那么就是典型的使用Clang Plugins的时候:

如果遇到下列情况,请使用Clang Plugins:

如果遇到下列情况,请不要使用Clang Plugins:

LibTooling

LibTooling是一个C++接口,它的目标在于实现完全独立的工具,而这些工具就像是被集成到运行Clang工具的服务中了一样。 如果遇到如下情况,那么就是典型的使用LibTooling的时候:

如果遇到下列情况,请使用LibTooling:

如果遇到下列情况,请不要使用LibTooling:

Clang tools是一系列基于LibTooling架构基础之上构建的特殊的开发者工具,它们是Clang工程的一部分。它们的目标是自动化和改善C/C++开发者的核心开发活动。

我们已经在构建或者计划构建的作为Clang工程的一部分例子工具有:

(完)