一。安装(详情可参考官网内容http://docs.codehaus.org/pages/viewpage.action?pageId=185073817)
1. c++ plugin(community),这个可以直接从sonar的Update Center安装。装的时候注意了,这个是免费的,还有一个c/c++ analyser plugin是要付费的,别搞错了。
2. cppcheck,专门针对c/c++代码进行静态分析的免费第三方工具,可以直接下载安装http://cppcheck.sourceforge.net/
3. RATS(Rough Auditing Tool for Security),探测代码中潜在的安全问题,下载链接https://code.google.com/p/rough-auditing-tool-for-security/downloads/list
4. Vera++,主要做代码风格的检查,下载链接https://bitbucket.org/verateam/vera/downloads
5. CppNcss,进行复杂度的检查,下载链接http://sourceforge.net/projects/cppncss/files/
6. Python 2.7,下载链接http://www.python.org
7. GCW(GCC for Windows),下载链接http://sourceforge.net/projects/gcw/files/
8. Gcov,下载链接https://github.com/gcovr/gcovr/releases
9. 因为C++代码的推荐分析方式是maven,因此需要安装Maven,下载链接:http://maven.apache.org/download.cgi
添加环境变量MAVEN_HOME指向maven的安装目录,并将%MAVEN_HOME%\bin添加到环境变量path中去。打开cmd窗口,运行命令mvn -version,如能正常显示则表明安装正确。
编辑文件%MAVEN_HOME%\conf\settings.xml,添加如下关于sonar的profile
<
profile
>
<
id
>sonar</
id
>
<
activation
>
<
activeByDefault
>true</
activeByDefault
>
</
activation
>
<
properties
>
<
!-- Example for MySQL-->
<
sonar.jdbc.url
>
jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8
</
sonar.jdbc.url
>
<
sonar.jdbc.username
>sonar</
sonar.jdbc.username
>
<
sonar.jdbc.password
>sonar</
sonar.jdbc.password
>
<!-- Optional URL to server. Default value is http://localhost:9000 -->
<
sonar.host.url
>
http://myserver:9000
</
sonar.host.url
>
</
properties
>
</
profile
>
添加环境变量MAVEN_OPTS,赋值为
-Xmx1024m -XX:MaxPermSize=512m。
10。 下载sonar的c++ maven插件cxx-maven-plugin,下载链接https://github.com/franckbonin/cxx-maven-plugin
下载之后,在pom.xml所在的目录下运行命令:mvn clean install来安装插件。
二,分析
1. 为项目编写运行maven必须的pom.xml文件。官网上有sample文件http://docs.codehaus.org/display/SONAR/Running+the+analysis
官网的实例完整而繁琐,下面是我们项目正在使用的pom文件片段:
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<groupId>org.carestream.sample</groupId>
<artifactId>sample</artifactId>
<version>1.0.30.0</version>
<packaging>pom</packaging>
<name>sample</name>
<build>
<!-- To define the plugin version in your parent POM -->
<pluginManagement>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>cxx-maven-plugin</artifactId>
<version>0.0.5-SNAPSHOT</version>
</plugin>
</plugins>
</pluginManagement>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>cxx-maven-plugin</artifactId>
<configuration>
<sourceDirs>
<sourceDir>${basedir}\..\src</sourceDir>
</sourceDirs>
</configuration>
<executions>
<execution>
<id>cppcheck</id>
<goals>
<goal>cppcheck</goal>
</goals>
<configuration>
<reportIdentifier>SAMPLE</reportIdentifier>
</configuration>
</execution>
<execution>
<id>cppncss</id>
<phase>test</phase>
<goals>
<goal>launch</goal>
</goals>
<configuration>
<executable>cmd.exe</executable>
<commandArgs>
/c "cppncss.bat -r -v -x -k -f=cppncss-reports\cppncss-result-SAMPLE.xml ${basedir}/..\src -p=${basedir}/"
</commandArgs>
</configuration>
</execution>
<execution>
<id>vera++</id>
<phase>test</phase>
<goals>
<goal>launch</goal>
</goals>
<configuration>
<executable>perl</executable>
<commandArgs>
run_vera++.pl "${basedir}\..\src" "vera++-reports/vera++-result-SAMPLE.xml"
</commandArgs>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
<sourceDirectory>${basedir}\..\src</sourceDirectory>
</build>
<properties>
<sonar.language>c++</sonar.language>
<sonar.dynamicAnalysis>reuseReports</sonar.dynamicAnalysis>
<sonar.scm.url>scm:svn:https://shgwp1025/svn/csi/trunk</sonar.scm.url>
</properties>
</project>
其中,run_vera++.pl是用来整理vera++的结果并生成xml格式report文件的perl脚本。注意:为了正确运行vera++,请添加环境变量VERA_ROOT,其路径是scripts目录的父目录。
2. 在pom.xml文件所在的目录内运行命令: mvn clean install
3. 在pom.xml文件所在的目录内运行命令: mvn sonar:sonar
4. 从浏览器登录sonar页面,查看运行结果。
注:使用cppncss时如果发现java heap space错误,打开cppncss安装目录下的bin\cppncss.bat文件,修改第七十一行set EXTRA_JVM_ARGUMENTS=-Xms256m -Xmx512m,将最大heap space从512m增加到1024m。