CSDN GitHub
Linux下源代码行数统计工具(sloccount, cloc等) AderXCoding/system/tools/sourcecount


知识共享许可协议 本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可

在windows下总是有很多源代码统计工具, 比如 SourceCounter(源代码统计精灵) 等工具

之前我总是使用如下命令统计源代码的信息, 繁琐而可读性差

find . -type f -name "*.[hc]" | xargs cat | wc -l
 find . -name "*.[hc]" | xargs -L 1 wc -l | awk '{print $1}' | while read num; do total=$((total+num)); echo $total; done

1 sloccount源代码行数统计工具

sloccount=Count Source Lines Of Code

官网 : http://www.dwheeler.com/sloccount/

1.1 Ubuntu安装

sudo apt-get install sloccount

1.2 使用

sloccount  [--version]  [--cached]  [--append]  [  --datadir directory ]
       [--follow]  [--duplicates]  [--crossdups]  [--autogen]  [--multiproject]
       [--filecount] [--wide] [--details] [ --effort F E ] [ --schedule F E ] [
       --personcost cost ] [ --overhead overhead ] [  --addlang  language  ]  [
       --addlangall ] [--] directories
--cached

跳过计算过程,直接使用上次结果

参数 描述
–multiproject 如果该文件夹包括一系列的子文件夹,而它们中的每一个都是相对独立开发的不同的项目,那么使用”–multiproject”选项,评估将会正确的考虑到这一点
–filecount 显示文件数目而非代码行数
–details 显示每个源文件的详细信息
–duplicates 算上所有重复的(默认情况下如果文件有相同的内容,则只算一个)
–crossdups 如果顶目录包含几个不同的项目,并且你想把不同的项目下重复的文件在每个项目中都算上一次,则使用该选项

1.3 转换成html文件

有一个sloc2html.py可以把生成的结果转换为带图形统计结果的html文件. 缺点是对中文支持不好

sloccount --wide --multiproject SourceDirectory > result.txt
sloc2html.py result.txt > result.html

再打开result.html即可看到结果形如:

下载地址 http://www.dwheeler.com/sloccount/sloc2html.py.txt

输出样例 http://www.dwheeler.com/sloccount/sloc2html-example.html

wget http://www.dwheeler.com/sloccount/sloc2html.py.txt -O sloc2html.py

sloc2html.py文件源代码如下

#!/usr/bin/env python
# Written by Rasmus Toftdahl Olesen <rto@pohldata.dk>
# Modified slightly by David A. Wheeler
# Released under the GNU General Public License v. 2 or higher
from string import *
import sys
NAME = "sloc2html"
VERSION = "0.0.2"
if len(sys.argv) != 2:
    print "Usage:"
    print "\t" + sys.argv[0] + " <sloc output file>"
    print "\nThe output of sloccount should be with --wide and --multiproject formatting"
    sys.exit()
colors = { "python" : "blue",
           "ansic" : "yellow",
           "perl" : "purple",
           "cpp" : "green",
           "sh" : "red",
           "yacc" : "brown",
           "lex" : "silver"
           # Feel free to make more specific colors.
           "ruby" : "maroon",
           "cs" : "gray",
           "java" : "navy",
           "ada" : "olive",
           "lisp" : "fuchsia",
           "objc" : "purple",
           "fortran" : "purple",
           "cobol" : "purple",
           "pascal" : "purple",
           "asm" : "purple",
           "csh" : "purple",
           "tcl" : "purple",
           "exp" : "purple",
           "awk" : "purple",
           "sed" : "purple",
           "makefile" : "purple",
           "sql" : "purple",
           "php" : "purple",
           "modula3" : "purple",
           "ml" : "purple",
           "haskell" : "purple"
print "<h2>Projects</h2>"
line = ""
while line != "SLOC\tDirectory\tSLOC-by-Language (Sorted)\n":
    line = file.readline()
print "<table>"
print "<tr><th>Lines</th><th>Project</th><th>Language distribution</th></tr>"
line = file.readline()
while line != "\n":
    num, project, langs = split ( line )
    print "<tr><td>" + num + "</td><td>" + project + "</td><td>"
    print "<table width=\"500\"><tr>"
    for lang in split ( langs, "," ):
        l, n = split ( lang, "=" )
        print "<td bgcolor=\"" + colors[l] + "\" width=\"" + str( float(n) / float(num) * 500 ) + "\">" + l + "=" + n + "&nbsp;(" + str(int(float(n) / float(num) * 100)) + "%)</td>"
    print "</tr></table>"
    print "</td></tr>"
    line = file.readline()
print "</table>"
print "<h2>Languages</h2>"
while line != "Totals grouped by language (dominant language first):\n":
    line = file.readline()
print "<table>"
print "<tr><th>Language</th><th>Lines</th></tr>"
line = file.readline()
while line != "\n":
    lang, lines, per = split ( line )
    lang = lang[:-1]
    print "<tr><td bgcolor=\"" + colors[lang] + "\">" + lang + "</td><td>" + lines + " " + per + "</td></tr>"
    line = file.readline()
print "</table>"
print "<h2>Totals</h2>"
while line == "\n":
    line = file.readline()
print "<table>"
print "<tr><td>Total Physical Lines of Code (SLOC):</td><td>" + strip(split(line,"=")[1]) + "</td></tr>"
line = file.readline()
print "<tr><td>Estimated development effort:</td><td>" + strip(split(line,"=")[1]) + " person-years (person-months)</td></tr>"
line = file.readline()
line = file.readline()
print "<tr><td>Schedule estimate:</td><td>" + strip(split(line,"=")[1]) + " years (months)</td></tr>"
line = file.readline()
line = file.readline()
print "<tr><td>Total estimated cost to develop:</td><td>" + strip(split(line,"=")[1]) + "</td></tr>"
print "</table>"
file.close()
print "Please credit this data as \"generated using 'SLOCCount' by David A. Wheeler.\"\n"
print "</body>"
print "</html>"

2 cloc代码行数统计工具

cloc也可以用来统计源代码的行数, 其本质是一个perl的脚本

sudo apt-get install cloc

进入到需要统计的目录执行

cloc .

其本质是一个perl的脚本, 可以用

file `which cloc`
cat `which cloc`

查看其源代码的信息

cd sl occ ount -clojure lein run /path/to/project # => {:html 7758, :text 541, :xml 15830, :comment 280 ...} ( require '[ sl occ ount .core :as sl occ ount ]) ( sl occ ount /loc " /path/to/project " ) ; ; => {:html 7758, :text 541, :xml 15830, :comment 280 ...} 2013 年由 ken restivo 修改 Source Lines of Code SL OC 是常用于衡量软件项目大小和复杂程度的度量标准。分为 Physical 物理源码 行数 和 Logical 逻辑源码 行数 。 物理源码 行数 :文本的 行数 ,包括注释,甚至空行等,更易获得 逻辑源码 行数 :可执行表达式的数量,但与编程语言、特殊定义相关,难获得 for (i=0; i<100; ++i) printf("%d bottles of beer on the wall\n"); //How many LOCs is here? for ( 这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 欢迎使用Markdown编辑器 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Mar 在SUM下面可以清晰的看到新增、修改和删除的代码 行数 (code列)、文件数(file列)、注释 行数 (comment) Linux 版的可以处理超大工程的文件,不会出现其它同类 工具 在处理超大文件时崩溃的问题。当然也可以将屏幕打印输出到文档,加参数 --report-file=用法简单,学习成本低,尤其是看了我这篇文章之后就更低了。直接在 cloc -1.96目录中执行 cloc 即可。另外,前面章节中提到的参数也都适用。解压出文件目录: cloc -1.96。高效是其优点,且稳定性比较好。 4、 cloc _github: cloc _github是一个针对Github仓库的代码 行数 统计 工具 ,可以根据仓库地址 统计 代码 行数 ,并生成详细的报告。在 Linux 开发过程中,有一些常用的代码 统计 工具 可以帮助开发人员了解代码量、文件数量、 行数 统计 等信息。2、 SL OCC ount SL OCC ount 是一个可定制的代码 行数 统计 工具 ,能够分析项目目录下的 源代码 文件,生成详细的代码 行数 统计 报告。3、tokei:tokei是另一个跨平台的代码 行数 统计 工具 ,支持多种编程语言,能够快速 统计 代码 行数 、文件数量等信息。 重点:发现 cloc 非常好用,直接就出结果:在windows下总是有很多 源代码 统计 工具 , 比如 Source Coun ter( 源代码 统计 精灵)等 工具 之前我总是使用如下命令 统计 源代码 的信息, 繁琐而可读性差find.-typef-name"*.[hc]"|xargscat|wc-l或者find.-name"*.[hc]"|xargs-L1wc-l| awk '{...