Ubuntu下clang开发工具简易入门知识(一)
2014-07-13 20:43
330 查看
本文部分翻译自http://clang.llvm.org/docs/Tooling.html,加上个人学习经验.
首先,需要要选择好正确的接口(Choosing the Right Interface for Your Application)
基于clang的应用主要三种接口:
一套稳定的高级别C接口, 抽象程度高,以cursor为访问单位(CXCursor),向后兼容性好,有源自于它的python bindings(clang_complete的开源项目中使用了它).
比较好用,最后的工具就像普通的程序一样编译即可,只是要-l的内容多一些,配合RecursiveAST和Rewriter能够做不少事.
文档:http://clang.llvm.org/doxygen/group__CINDEX.html
详细解说可以见以下视频:
视频: http://devimages.apple.com/llvm/videos/Libclang.mov
Pdf: http://llvm.org/devmtg/2010-11/Gregor-libclang.pdf
但要注意这个接口无法完全得到ClangAST的信息,下面两个都可以,但有其他限制.(可以尝试一下将所有的CXCursor中的token输出,和clang plugin中的-ast-dump产生的效果比较一下就知道了)
这套接口用于clang在编译时,给AST(抽象语法树)增加一些额外的动作,能够提供lint风格(一款出错检测软件)的warnings 或者 errors,
这个工具可以完全得到ClangAST的信息,但如果离开你的clang的build环境,该工具无法使用.
大致来说该工具的使用样子:
clang++ -D_GNU_SOURCE -D_DEBUG 等配置参数 \ -I几个include路径 待检测文件名(.cpp等) -fsyntax-only \ -Xclang 该工具名(二进制文件)
Clang Plugins介绍文档:http://clang.llvm.org/docs/ClangPlugins.html
可以参考该视频的后半部分(使用了-ast-dump等工具,需要翻wall):http://www.youtube.com/watch?v=VqCkCDFLSsc
这套C++接口可以用来做独立的工具,可以完全控制,目前已有一些Clang的项目加入到Clang官方的Examples中,clang-check,clang-fixit,clang-format等
其中比较有用的是ASTMatcher,它使用了自己的DSL(Domain Specific Language)来匹配一些AST结点.
这是ASTMatcher的文档:http://clang.llvm.org/docs/LibASTMatchersReference.html
ASTMatcher.h:http://clang.llvm.org/doxygen/ASTMatchers_8h_source.html
LibTooling的介绍文档:http://clang.llvm.org/docs/LibTooling.html
PS:
其实翻Wall的视频中介绍了AST结点是什么样子的,我这里再贴一下:
文件内容:
int main(){
int a;
return 0;
}
-ast-dump的结果:
TranslationUnitDecl 0xc809540 <<invalid sloc>>
|-TypedefDecl 0xc809810 <<invalid sloc>> __builtin_va_list 'char *'
`-FunctionDecl 0xc809880 <newfile.c:1:1, line:4:1> main 'int ()'
`-CompoundStmt 0xc809958 <line:1:11, line:4:1>
|-DeclStmt 0xc809920 <line:2:2, col:7>
| `-VarDecl 0xc8098f0 <col:2, col:6> a 'int'
`-ReturnStmt 0xc809948 <line:3:2, col:9>
`-IntegerLiteral 0xc809930 <col:9> 'int' 0
首先,需要要选择好正确的接口(Choosing the Right Interface for Your Application)
基于clang的应用主要三种接口:
LibClang:
一套稳定的高级别C接口, 抽象程度高,以cursor为访问单位(CXCursor),向后兼容性好,有源自于它的python bindings(clang_complete的开源项目中使用了它).比较好用,最后的工具就像普通的程序一样编译即可,只是要-l的内容多一些,配合RecursiveAST和Rewriter能够做不少事.
文档:http://clang.llvm.org/doxygen/group__CINDEX.html
详细解说可以见以下视频:
视频: http://devimages.apple.com/llvm/videos/Libclang.mov
Pdf: http://llvm.org/devmtg/2010-11/Gregor-libclang.pdf
但要注意这个接口无法完全得到ClangAST的信息,下面两个都可以,但有其他限制.(可以尝试一下将所有的CXCursor中的token输出,和clang plugin中的-ast-dump产生的效果比较一下就知道了)
Clang Plugins
这套接口用于clang在编译时,给AST(抽象语法树)增加一些额外的动作,能够提供lint风格(一款出错检测软件)的warnings 或者 errors,这个工具可以完全得到ClangAST的信息,但如果离开你的clang的build环境,该工具无法使用.
大致来说该工具的使用样子:
clang++ -D_GNU_SOURCE -D_DEBUG 等配置参数 \ -I几个include路径 待检测文件名(.cpp等) -fsyntax-only \ -Xclang 该工具名(二进制文件)
Clang Plugins介绍文档:http://clang.llvm.org/docs/ClangPlugins.html
可以参考该视频的后半部分(使用了-ast-dump等工具,需要翻wall):http://www.youtube.com/watch?v=VqCkCDFLSsc
LibTooling
这套C++接口可以用来做独立的工具,可以完全控制,目前已有一些Clang的项目加入到Clang官方的Examples中,clang-check,clang-fixit,clang-format等其中比较有用的是ASTMatcher,它使用了自己的DSL(Domain Specific Language)来匹配一些AST结点.
这是ASTMatcher的文档:http://clang.llvm.org/docs/LibASTMatchersReference.html
ASTMatcher.h:http://clang.llvm.org/doxygen/ASTMatchers_8h_source.html
LibTooling的介绍文档:http://clang.llvm.org/docs/LibTooling.html
PS:
其实翻Wall的视频中介绍了AST结点是什么样子的,我这里再贴一下:
文件内容:
int main(){
int a;
return 0;
}
-ast-dump的结果:
TranslationUnitDecl 0xc809540 <<invalid sloc>>
|-TypedefDecl 0xc809810 <<invalid sloc>> __builtin_va_list 'char *'
`-FunctionDecl 0xc809880 <newfile.c:1:1, line:4:1> main 'int ()'
`-CompoundStmt 0xc809958 <line:1:11, line:4:1>
|-DeclStmt 0xc809920 <line:2:2, col:7>
| `-VarDecl 0xc8098f0 <col:2, col:6> a 'int'
`-ReturnStmt 0xc809948 <line:3:2, col:9>
`-IntegerLiteral 0xc809930 <col:9> 'int' 0
相关文章推荐
- Ubuntu下clang开发工具简易入门知识(一)
- Js+Dhtml:WEB程序员简易开发工具包(预先体验版)
- [Symbian开发入门]Symbian和C++ SDK开发入门之工具
- LoadRunner工具入门知识介绍
- Java ADF开发入门-添加命令和工具
- Java ADF开发入门-添加命令和工具
- Js+Dhtml:WEB程序员简易开发工具包(预先体验版)
- Android开发入门(三)之调试工具adb,ddms
- linux操作系统下c语言编程入门--Linux下C开发工具介绍
- linux操作系统下c语言编程入门--Linux下C开发工具介绍
- Windows Server 2008 Vista Sidebar Gadget (侧边栏小工具) 入门开发实例
- Symbian和C++ SDK开发入门之工具
- linux操作系统下c语言编程入门 -- (9)inux下C开发工具介绍
- 开发控件的入门知识(菜鸟级)
- Ubuntu c++开发工具
- C++ SDK和Symbian开发入门之工具
- 开发 Windows Mobile 应用程序入门知识
- Symbian和C++ SDK开发入门之工具
- Visual Studio Express Editions 开发工具入门概要.
- Windows Server 2008 Vista Sidebar Gadget (侧边栏小工具) 入门开发实例