Ubuntu下clang开发工具简易入门知识(一)
2015-05-05 00:00
756 查看
摘要: clang常用库简介
本文部分翻译自http://clang.llvm.org/docs/Tooling.html,加上个人学习经验.
首先,需要要选择好正确的接口(Choosing the Right Interface for Your Application)
基于clang的应用主要三种接口:
比较好用,最后的工具就像普通的程序一样编译即可,只是要-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产生的效果比较一下就知道了)
这个工具可以完全得到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
其中比较有用的是ASTMatcher,它使用了自己的DSL(Domain Specific Language)来匹配一些AST结点.
这是ASTMatcher的文档:http://clang.llvm.org/docs/LibASTMatchersReference.html
ASTM
7fe8
atcher.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
本文部分翻译自http://clang.llvm.org/docs/Tooling.html,加上个人学习经验.
首先,需要要选择好正确的接口(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
ASTM
7fe8
atcher.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开发工具简易入门知识(一)
- lae界面开发工具入门之介绍四--<秘籍篇-拷贝粘贴>
- Linux开发工具_2_gcc入门(下)
- Linux开发工具_4_Makefile入门(下)
- 【PHP入门篇】 8.PHP开发工具之Zend Studio常用功能--慕课网【学习总结】
- Linux驱动开发入门——基本知识简介
- lae界面开发工具入门之介绍十二--<iOS系统如何编译打包?>
- Kinect for Windows SDK开发入门(三):基础知识 下
- 开发控件的入门知识(菜鸟级)
- dao-service-servlet-jsp构建简易web通讯录(三层开发)预备知识
- Symbian和C++ SDK开发入门之工具
- [入门]Ruby on Rails入门教程及开发工具选用
- Java ADF开发入门-添加命令和工具
- 在eclipse开发工具中使用JUnit4进行单元测试详解(一)入门篇
- 【Asp.net入门4-01】基本开发工具
- 网游服务端开发入门知识
- JAX-RS开发(一):基本概念入门和工具准备
- IOS开发入门基本知识——UIView和NSTimer形成的霓虹灯效果
- Web开发入门基本知识
- 【经典C#.NET入门教程】管理软件开发必备知识免费视频教程下载