如何用clang analyzer定制静态分析规则(1)工程配置篇

2017-04-18 11:32:41来源:CSDN作者:u012448058人点击

OS X、iOS开发都很熟悉clang,这个编译器前端支持C、C++、Objective-C、Objective-C++,是Mac世界里最主要的编译工具。
clang static analyzer(以下简称clang analyzer)是基于clang开发的官方静态代码分析工具,用于在编译阶段提前发现代码问题,具体信息请见官方网站:https://clang-analyzer.llvm.org/。关于clang analyzer的使用,网上文章很多,本文不再赘述,只介绍如何基于这个静态分析器,开发自己的分析规则,实现技术和业务上的需求。

1、准备工作

1.1、编译工具

详见:
http://llvm.org/docs/GettingStarted.html#requirements
http://clang.llvm.org/get_started.html
主要的是:
* clang >= 3.1
* CMake >= 3.4.3
* python >= 2.7
* svn / git
其实只要是用Mac电脑开发的,基本都满足条件了。虽然llvm和clang在Windows系统上也可以编译,但是……那样的需求可能比较少,本文不做展开。

1.2、llvm & clang源码

clang analyzer是基于clang构建的,clang又是llvm编译器最主要的前端,事实上,它们的源码本来也是在一起的。官方文章 http://clang.llvm.org/get_started.html 是大家编译clang代码的指南,那里面源码仓库还是用的svn的。但其实,官方仓库自己也在往git迁,我们还是使用git仓库:
http://llvm.org/git/llvm.git
http://llvm.org/git/clang.git
或者用github上这个非官方的mirror也行(每5分钟同步一次):
https://github.com/llvm-mirror

2、编译流程

2.1、创建源码目录

mkdir -p ~/projects/analyzercd ~/projects/analyzer

2.2、checkout源码

git clone http://llvm.org/git/llvm.git -b release_40git clone http://llvm.org/git/clang.git llvm/tools/clang -b release_40

这里需要说明的是:
(1)clang当前最新release版本是4.0.0,而我们主要目的是基于clang定制静态分析规则,不是开发clang的新特性,所以请checkout 4.0.0的代码。
(2)如果只是开发静态分析规则,到此已经足够,如果还对其他工具有兴趣,可以继续

git clone http://llvm.org/git/clang-tools-extra.git llvm/tools/clang/tools/extra -b release_40git clone http://llvm.org/git/compiler-rt.git llvm/projects/compiler-rt -b release_40

2.3、创建Xcode工程

mkdir -p ~/projects/analyzer/buildcd ~/projects/analyzer/buildcmake -G "Xcode" ../llvm

注意:cmake可以为多种编译工具创建编译配置,官方文档使用

cmake -G "Unix Makefiles" <llvm_source_path>

来创建GNU make的编译配置。但是,在Mac上开发,我们怎么能抛弃Xcode呢?所以本文是使用Xcode来进行编译的。
cmake还有个常用参数CMAKE_BUILD_TYPE用来指定生成的编译配置类型,一般用Debug、Release。

cmake -G "Unix Makefiles" CMAKE_BUILD_TYPE="Debug" <llvm_source_path>

这个值缺省是Debug,所以如果你采用GNU make来做命令行编译,那需要小心指定。但本文用的是Xcode,我们可以暂时忽略这点,因为后期能在Xcode里设置。

2.4、打开Xcode工程

open LLVM.xcodeproj

当打开Xcode工程时,Xcode会有如下提示:

如果你已经比较熟悉llvm & clang工程结构,那建议还是选“Manually Manage Schemes”吧,因为cmake为我们自动生成的scheme实在是太多了……关键是,如果我们只想开发静态分析规则,大部分scheme是用不到的,而且我们其实并不需要编译那么多模块。
对于新手,我们选择“Automatically Create Schemes”。
进入Xcode后,请选择“Manage Schemes…”,将大部分Scheme隐藏:

我们其实只需要clang一个scheme就够了:

然后就是出去吃个饭,等Xcode的Indexing完成,这个过程有点久……

2.5、编译clang

选择clang scheme,开始Build,完成后我们便得到了
clang toolchain:~/projects/analyzer/build/Debug/bin
和对应的lib库:~/projects/analyzer/build/Debug/lib

值得一提的是,在Xcode工程里有个scheme叫clangStaticAnalyzerCheckers,对应的Build结果就是lib目录下的clang analyzer官方规则库~/projects/analyzer/build/Debug/lib/libclangStaticAnalyzerCheckers.a

如果想要单独修改/调试这个缺省的规则库,以后可以单独Build clangStaticAnalyzerCheckers,然后再Build clang。我们从clang analyzer官网下载的安装包里,clang自带规则库也是静态链接的。

到此为止,clang analyzer开发所需工程配置完毕。另外,以上步骤其实对于用Xcode编译或开发clang其他的功能也是适用的。

最新文章

123

最新摄影

闪念基因

微信扫一扫

第七城市微信公众平台