如何找出Xcode专案中有多少行程式码?


Answers:


126

查看CLOC

cloc计算许多编程语言中源代码的空行,注释行和物理行。

旧版构建已存档在SourceForge上。)


11
可通过Homebrew获得CLOC。在命令行中的易用性令人耳目一新。
avelis 2013年

1
我喜欢那里的双关语-是的,您可以通过检查CLOC来判断自己的工作效率。
bobobobo

使用上面的链接下载cloc工具的'./cloc-1.56.pl'烫发版本。确保使用“ chmod u + x cloc-1.56.pl”命令启用对cloc-1.56.pl文件的执行权限。如果您的源代码位于目录“ project_code”中,则只需运行以下命令。
JZ。

233

我看到它随处可见并自己使用:

find . "(" -name "*.m" -or -name "*.mm" -or -name "*.cpp" -or -name "*.swift" ")" -print0 | xargs -0 wc -l

2
要处理名称中带有空格的子目录,请执行以下操作:find。“(”-名称“ .m”-或-名称“ .mm”-或-名称“ * .cpp”“)” -print0 | xargs -0 wc -l
Matt__C 2012年

2
这篇博客文章可能有帮助:allara.blogspot.co.uk/2010/12/...
埃里克Brotto

12
我们在SO上发布答案,而不是提供相同答案的博客条目链接。
约书亚·诺齐

6
似乎.m和.mm测试缺少*(已编辑:看来SO不会在没有前面加斜杠的情况下呈现这些内容)直到我将它们添加为:find,以上内容对我来说都不起作用。“(”-名称“ * .m”-或-名称“ * .mm”-或-名称“ * .cpp”“)” -print0 | xargs -0 wc -l
bladnman

2
Swift用户注意事项-替换或添加另一个带有文件扩展名.swift的“或”
Byron Coetsee 2014年

79

正如我所提到的,我一直在使用CLOC,它非常易于使用。这是一个PERL脚本,您可以在项目目录中添加并运行它。Nathan Kinsinger

PERL已经是Mac OS的一部分,您可以通过这种方式调用脚本来查找已编写的行数:

perl cloc-1.56.pl ./YourDirectoryWhereYourSourcesAre

这是我从以下命令获得的输出示例:

   176 text files.
   176 unique files.                                          
     4 files ignored.

http://cloc.sourceforge.net v 1.56  T=2.0 s (86.0 files/s, 10838.0 lines/s)
-------------------------------------------------------------------------------
Language                     files          blank        comment           code
-------------------------------------------------------------------------------
Objective C                     80           3848           1876          11844
C/C++ Header                    92            980           1716           1412
-------------------------------------------------------------------------------
SUM:                           172           4828           3592          13256
-------------------------------------------------------------------------------

4
真好!我喜欢这个比我自己的答案更好。:-)
Joshua Nozzi 2015年

1
您可能需要先下载脚本。然后导航到该脚本所在的目录,并使用您下载的任何文件名运行该命令。
prolfe

应该CLOC perl-1.56.pl ./YourDirectoryWhereYourSourcesAre而不是上面,如果你从头确保您输入当前的perl版本的Perl安装(我的是5.30.1所以基本上CLOC perl-5.30.1.pl ./)
Golan Shay

1
最后一件事,我必须根据第一次运行时出现的错误运行span Moo,因此也要检查该错误
Golan Shay

50

打开Terminal.app,进入项目的根目录,然后运行以下命令:

仅适用于Swift:

find . \( -iname \*.swift \) -exec wc -l '{}' \+

仅对于Obj-C:

find . \( -iname \*.m -o -iname \*.mm -o -iname \*.h \) -exec wc -l '{}' \+

对于Obj-C + Swift:

find . \( -iname \*.m -o -iname \*.mm -o -iname \*.h -o -iname \*.swift \) -exec wc -l '{}' \+

对于Obj-C + Swift + C + C ++:

find . \( -iname \*.m -o -iname \*.mm -o -iname \*.c -o -iname \*.cc -o -iname \*.h -o -iname \*.hh -o -iname \*.hpp -o -iname \*.cpp -o -iname \*.swift \) -exec wc -l '{}' \+

终端快速提示:
ls:列出目录内容
cd:更改目录
按下选项卡以自动完成
记住在空格前放置“ \”反斜杠,
我建议从主项目下放一个文件夹,这样就可以消除框架中的代码数


44

在终端中,切换到项目目录并运行:

find . -type f -print0 | xargs -0 cat | wc -l

如果只需要某些文件类型,请尝试类似

find . -type f -name \*.[ch]* -print0 | xargs -0 cat | wc -l

不错,但是包含注释和空白行,因此与要求的不完全相同。LOC度量应尽可能独立于代码格式样式,因此文件中逻辑部分之间的一堆空白行或注释不应计入总和。
bassim 2014年

34

查看Xcode Statistician,它完全可以满足您的需求。它还提供了其他有趣的统计数据,因此值得不时地尝试一下。

请注意,尽管它会成组显示,但它不会出现在真实文件夹中。奇怪的是您没有使用真实的文件夹,因此效果很好。如果您使用的是文件夹,则只需对每个文件夹进行计数并将它们加在一起。

注意:从2012年6月开始,看来这不适用于最新版本的Xcode。


对于将Objective-C和C / C ++混合使用的用户,请注意:它不计算* .c或* .cpp文件。
Emile Cormier 2012年

3
请注意,此时Xcode Statisician不会处理项目中的子目录。
Matt__C 2012年

@Matt__C Aye,因此“请注意,它不会在真实文件夹中显示”。不幸的是,这需要更多的人工工作(并且递归文件夹搜索很容易编写代码),但是它是可行的。
马修·弗雷德里克

1
似乎对Lion上的X-Code 4.2项目根本不起作用(至少它没有为我的项目提供任何统计信息)
BadPirate 2012年

啊,真可惜,现在可能已经过时了。
马修·弗雷德里克

31
  1. 打开终端
  2. 导航到您的项目
  3. 在您的项目中执行以下命令:

    find . -path ./Pods -prune -o -name "*.swift" -print0 ! -name "/Pods" | xargs -0 wc -l

    要么:

    find . -path ./Pods -prune -o -name "*[hm]" -print0 ! -name "/Pods" | xargs -0 wc -l

(*从总数中排除Pod文件的数量)


16

如果您在终端中转到项目的目录,然后输入:

find . "(" -name "*.h" -or -name "*.m" -or -name "*.mm" -or -name "*.hpp" -or -name "*.cpp"  -or  -name "*.c" -or -name "*.cc" -or -name "*.swift" ")" -print0 | xargs -0 wc -l

这将为您提供项目明细,以及每个文件和整个项目的总行数。


对于swift,只需删除所有内容并添加.swiftfind . "(" -name "*.swift" ")" -print0 | xargs -0 wc -l
WCByrne,2015年

@WCByrne或者,我们可以在原始命令中添加.swift
RileyE 2015年

确实。由于大多数库和借来的代码仍位于.h和.m中,因此有助于将计数减少到我所写的内容。
WCByrne

1
绝对。每个人都有自己的解决方案。如果他们有自己的前缀(例如:“ RE”),他们甚至可以这样做find . "(" -name "RE*.swift" ")" -print0 | xargs -0 wc -l
RileyE

9

Nozzi的版本不适用于我,但是这个版本:

find . -type f -print0 | xargs -0 cat | wc -l

1
简短明了-但它也可以计算非源代码文件中的行数。因此,实际上,文件名扩展过滤在这里至关重要。OP希望计算“源代码行”。没有任何文字行。
Motti Shneor '18

7

快速简便的方法:

使用正则表达式搜索(“查找导航器”,选择“查找”>“正则表达式”)。

。\ n

可以方便地与Xcode搜索范围一起使用,并且您可以轻松地将其自定义为要计数的任何类型的行;)。


现在,这是一个不错的选择!不是最快的,但是没有离开开发环境。我喜欢。更好的正则表达式可能可以避免计算空格线之类的东西。
Motti Shneor '18

把事情简单化。我喜欢。
devios1

6

您可以通过MacPorts 安装SLOCCount。或者,更粗略地讲,您可以使用wc -l。


CLOC基于SCLOCount,因此我想它仍然是使用CLOC的更好方法
tiguero 2012年

4
“开发的总估计成本= 1,934,715美元”。这件事情让我感到很快乐!
Valeriy Van

4

我不熟悉xcode,但是如果您只需要计算目录树中所有这些特定文件的行数,则可以使用以下命令:

find .... match of all those files ... -exec wc -l {} +

遵循Joshua Nozzi的回答,在GNU中,发现此类文件的正则表达式如下:

find . "(" -name "*.m" -or -name "*.mm" -or -name "*.cpp" -or -name "*.swift" ")" -exec wc -l {} +

甚至

find -regex ".*\.\(m\|mm\|cpp\|swift\)$" -exec wc -l {} +

这种使用正则表达式来匹配任何结尾的文件.m.mm.cpp或者.swift。您可以在如何在文件查找中使用正则表达式中查看有关这些表达式的更多信息。

如果您使用的是Mac OS find,那么您需要一种稍微不同的方法,如Motti Shneor在评论中所述:

find -E . -regex ".*\.([hmc]|mm|cp+|swift|pch)$" -exec wc -l {} +

两者都将以以下形式提供输出:

234 ./file1
456 ./file2
690 total

因此,您可以像这样保留它,也可以通过管道将其发送到tail -1(即),find ... | tail -1这样您就可以得到最后一行。


好--- find -regex“。* \
。etc

@MottiShneor您可能想在MacOS和其他人谈论的地方检查这个问题\|--regex在GNU find(我使用的那个)和MacOS中均有效。
fedorqui'SO停止伤害'18 May 30'6

好吧---不 我在MacOS中发现,必须找到-E才能获取扩展的正则表达式。请将上面建议的命令复制到任何可获得的OS-X上,然后自己看看。在MacOS-X上找到的人告诉您您必须-E。
Motti Shneor

最后,您还必须提供在OSX上进行搜索的路径。因此有效的变体如下所示:find -E。-regex“。* \。([[hmc] | mm | cp + | swift | pch)$” -exec wc -l {} +
Motti Shneor

@MottiShneor感谢您在MacOS中提供该方法。我已经更新了答案。
fedorqui'SO停止伤害'18

2

很抱歉重复。这是恕我直言的最简单方法:

  1. 在终端类型

find /users/<#username#>/documents/folderWithProject/ -type f -exec cp {} /users/<#username#>/documents/folderWithProject/newFolder/ \;

这会将所有文件从项目文件夹复制到newFolder

  1. 下载Xcode Statistician并将其与newFolder 在此处输入图片说明

该工具无法找到所有内容,看起来更像是实际上仅在当前文件夹中显示(甚至不包含子文件夹)
Daniel Daniel

我写道,第一步是将所有文件从项目文件夹复制到一个文件夹。
尼克·科夫,2016年

那“ XcodeStatistican”是否有机会开源?我将立即使它在任何项目结构上都能工作...目录和文件迭代器并不难做到。另外-从此处进行下载-未由确定的开发人员签名-可能是恶意软件:/
Motti Shneor '18

1

line-counter是一个很好的选择。它比CLOC更轻巧,比其他命令更强大,更易于使用。

快速概述

这就是您获得工具的方式

$ pip install line-counter

使用line命令来获取当前目录下的文件数和行数(递归)

$ line
Search in /Users/Morgan/Documents/Example/
file count: 4
line count: 839

如果您想了解更多细节,请使用line -d

$ line -d
Search in /Users/Morgan/Documents/Example/
Dir A/file C.c                                             72
Dir A/file D.py                                           268
file A.py                                                 467
file B.c                                                   32
file count: 4
line count: 839

这个工具最好的部分是,您可以向其中添加.gitignore之类的配置文件。您可以设置规则以选择或忽略要计数的文件种类,就像在'.gitignore'中所做的一样。是的,此工具的发明只是为了让我知道要简化的行数。

更多描述和用法在这里:https : //github.com/MorganZhang100/line-counter

我是这个简单工具的作者。希望它可以帮助别人。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.