如何找出 Xcode 项目中有多少行代码?
Posted
技术标签:
【中文标题】如何找出 Xcode 项目中有多少行代码?【英文标题】:How to find out how many lines of code there are in an Xcode project? 【发布时间】:2011-01-01 11:47:11 【问题描述】:有没有办法确定一个 Xcode 项目包含多少行代码?我保证不会将此类信息用于管理衡量或员工基准测试目的。 ;)
【问题讨论】:
如果你想要线条,那么你可以使用这个答案:***.com/questions/5901758/… 但它包含空格 这能回答你的问题吗? Count total number of lines in an Xcode project 【参考方案1】:我看到这个浮动并自己使用它:
find . "(" -name "*.m" -or -name "*.mm" -or -name "*.cpp" -or -name "*.swift" ")" -print0 | xargs -0 wc -l
【讨论】:
处理您需要的名称中带有空格的子目录: find . "(" -name ".m" -or -name ".mm" -or -name "*.cpp" ")" -print0 | xargs -0 wc -l 这篇博文可能会有所帮助:allara.blogspot.co.uk/2010/12/… 我们在 SO 上发布答案,而不是提供相同答案的博客条目的链接。 看来 .m 和 .mm 测试缺少一个 * (已编辑:似乎 SO 没有呈现没有前面斜线的那些)在我这样添加它们之前,上面对我不起作用:find . "(" -name "*.m" -or -name "*.mm" -or -name "*.cpp" ")" -print0 | xargs -0 wc -l Swift 用户注意事项 - 用文件扩展名 .swift 替换或添加另一个“或”【参考方案2】:查看CLOC。
cloc 对许多编程语言中源代码的空白行、注释行和物理行进行计数。
(Legacy builds are archived on SourceForge.)
【讨论】:
CLOC 可通过 Homebrew 获得。命令行的易用性令人耳目一新。 我喜欢名字中的双关语——是的,你可以通过查看你的 CLOC 来判断你的工作效率。 使用上面的链接下载'./cloc-1.56.pl' perm 版本的 cloc 工具。确保使用“chmod u+x cloc-1.56.pl”命令启用 cloc-1.56.pl 文件的执行权限。如果您的源代码位于目录 'project_code' 您只需要运行以下命令。【参考方案3】:我一直使用CLOC 作为mentioned by Nathan Kinsinger
,它相当容易使用。它是一个 PERL 脚本,您可以从项目目录中添加和运行。
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
-------------------------------------------------------------------------------
【讨论】:
不错!我比我自己的答案更喜欢这个。 :-) 您可能需要先下载脚本。然后导航到该脚本所在的目录并使用您下载的任何文件名运行该命令。 应该是 cloc perl-1.56.pl ./YourDirectoryWhereYourSourcesAre 而不是如上,如果你从头安装 perl 确保你输入当前的 perl 版本(我的是 5.30.1 所以基本上 cloc perl-5.30 .1.pl ./) 最后一件事,我必须按照第一次运行时出现的错误运行 span Moo,所以也要检查那个【参考方案4】:打开 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:更改目录 按Tab键自动完成 记得在空格前加上“\”反斜杠 我建议从主项目中删除一个文件夹,这样你就可以摆脱框架中的代码计数
【讨论】:
【参考方案5】:在终端中,切换到项目目录并运行:
find . -type f -print0 | xargs -0 cat | wc -l
如果您只想要某些文件类型,请尝试类似
find . -type f -name \*.[ch]* -print0 | xargs -0 cat | wc -l
【讨论】:
不错,但包括 cmets 和空行,因此不完全符合要求。 LOC 度量应尽可能独立于代码格式样式,因此文件中逻辑部分之间的一堆空行或 cmets 不应计入总和。【参考方案6】:查看 Xcode Statistician,它完全符合您的要求。它还提供了其他有趣的统计数据,因此值得不时尝试一下。
请注意,它不会在真实文件夹中查找,但会按组查找。奇怪的是你没有使用真正的文件夹,所以它会很好用。如果您使用文件夹,那么您只需在每个文件夹中进行计数并将它们添加在一起。
注意:截至 2012 年 6 月,这似乎不适用于最新版本的 Xcode。
【讨论】:
对于那些混合使用 Objective-C 和 C/C++ 的人来说只是一个提醒:它不包括 *.c 或 *.cpp 文件。 请注意,此时 Xcode Statisician 不处理您项目中的子目录。 @Matt__C 是的,因此“请注意,它不会在真实文件夹中查找”。不幸的是,需要更多的手动工作(递归文件夹搜索很容易编码),但它是可行的。 似乎它根本不适用于 Lion 上的 X-Code 4.2 项目(至少它没有为我的项目提供任何统计数据) 啊,可惜,现在可能已经过时了。【参考方案7】:-
打开终端
导航到您的项目
在您的项目中执行以下命令:
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 文件数)
【讨论】:
【参考方案8】:如果你在终端进入你的项目目录并输入:
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 或者,我们可以将 .swift 添加到原始命令中
确实如此。由于大多数库和借用的代码仍在 .h 和 .m 中,因此有助于将计数减少到我所写的内容。
当然。每个人都有自己的解决方案。如果他们有自己的前缀(例如:“RE”),他们甚至可以使用find . "(" -name "RE*.swift" ")" -print0 | xargs -0 wc -l
【参考方案9】:
在Mac中实现CLOC库的步骤如下:
-
打开终端。
通过在终端中复制并粘贴以下命令(包括双引号)来安装 Homebrew。
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
如果询问,请输入系统密码。
您将看到如下终端屏幕。
系统会弹出这么多权限,允许所有权限
如果一切顺利,您将看到如下终端屏幕,
-
现在可以使用以下命令安装 CLOC。
brew install cloc
-
导航到项目目录并运行以下任一命令。
cloc . --exclude-dir=Pods
(排除 pod 文件)
cloc .
(包括 pod 文件)
如果一切顺利,它会显示代码行数如下,
【讨论】:
【参考方案10】:Nozzi 的版本不适合我,但是这个版本:
find . -type f -print0 | xargs -0 cat | wc -l
【讨论】:
简洁明了 - 但它也计算非源代码文件的行数。所以实际上文件扩展名过滤在这里是至关重要的。 OP想要计算“源代码行”。没有任何文本行。【参考方案11】:快速简便的方法:
使用正则表达式搜索(查找导航器,选择查找 > 正则表达式)。
。\n
与 Xcode 搜索范围一起使用很方便,您可以轻松地将其自定义为您想要计算的任何类型的行;)。
【讨论】:
现在不错!不是最快的,但没有离开开发环境。我喜欢。可能一个更好的正则表达式可以避免计算空白行和类似的东西。 保持简单。我喜欢它。【参考方案12】:您可以通过 MacPorts 安装SLOCCount。或者,更粗略地说,你可以使用 wc -l。
【讨论】:
CLOC 基于 SCLOCount 所以我想它仍然是使用 CLOC 的更好方法 “预计开发总成本 = 1,934,715 美元”。这让我很开心!【参考方案13】:我不熟悉 xcode,但如果您只需要计算目录树中所有这些特定文件的行数,您可以使用以下命令:
find .... match of all those files ... -exec wc -l +
按照Joshua Nozzi's answer,在GNU find中,此类文件的正则表达式如下:
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
结尾的所有文件。您可以在How to use regex in file find 中查看有关这些表达式的更多信息。
如果您使用的是 Mac OS find,那么您需要一种稍微不同的方法,正如 cmets 中的 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 在 MacOS 上对我不起作用 - 它声称一个非法选项 --r 你在使用什么样的 find? @MottiShneor 您可能想查看this question,他们在哪里谈论\|
和MacOS 中的其他人。 --regex
在 GNU find(我使用的那个)和 MacOS 中都有效。
好吧——不。我发现在 MacOS 中你必须找到 -E 来表示扩展的正则表达式。将上面建议的命令复制到您可以获得的任何 OS-X 上,然后自己查看。 man find on MacOS-X 告诉你必须 -E 。
最后,您还必须提供在 OSX 上搜索的路径。所以有效的变体看起来像这样: find -E 。 -regex ".*\.([hmc]|mm|cp+|swift|pch)$" -exec wc -l +
@MottiShneor 感谢您在 MacOS 中提供该方法。我已经更新了答案。【参考方案14】:
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
我是这个简单工具的作者。希望它可以帮助某人。
【讨论】:
以上是关于如何找出 Xcode 项目中有多少行代码?的主要内容,如果未能解决你的问题,请参考以下文章